亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

沒有這樣的元素:無法在生產環境中使用chromedriver和Selenium定位元素

沒有這樣的元素:無法在生產環境中使用chromedriver和Selenium定位元素

函數式編程 2021-03-29 21:10:03
硒chromedriver出現問題,我無法弄清楚是什么原因造成的。幾周前,一切正常,突然開始出現此錯誤。問題來自以下功能。 def login_(browser):    try:        browser.get("some_url")        # user credentials        user = browser.find_element_by_xpath('//*[@id="username"]')        user.send_keys(config('user'))        password = browser.find_element_by_xpath('//*[@id="password"]')        password.send_keys(config('pass'))        login = browser.find_element_by_xpath('/html/body/div[1]/div/button')        login.send_keys("\n")        time.sleep(1)        sidebar = browser.find_element_by_xpath('//*[@id="sidebar"]/ul/li[1]/a')        sidebar.send_keys("\n")        app_submit = browser.find_element_by_xpath('//*[@id="sidebar"]/ul/li[1]/ul/li[1]/a')        app_submit.send_keys("\n")    except TimeoutException or NoSuchElementException:        raise LoginException此功能在開發環境(macOS 10.11)中正常工作,但是在生產環境中引發以下錯誤:Message: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="sidebar"]/ul/li[1]/a"}(Session info: headless chrome=67.0.3396.79)(Driver info: chromedriver=2.40.565383 (76257d1ab79276b2d53ee97XXX),platform=Linux 4.4.0-116-generic x86_64)我已經在每個環境中同時更新了Chrome和chromedriver(分別為v67和2.40)。我還給了它更多time.sleep(15)。但是問題仍然存在。我的最新猜測是,webdriver的初始化可能無法正常工作:def initiate_webdriver():   option = webdriver.ChromeOptions()   option.binary_location = config('GOOGLE_CHROME_BIN')   option.add_argument('--disable-gpu')   option.add_argument('window-size=1600,900')   option.add_argument('--no-sandbox')   if not config('DEBUG', cast=bool):       display = Display(visible=0, size=(1600, 900))       display.start()       option.add_argument("--headless")   else:       option.add_argument("--incognito")   return webdriver.Chrome(executable_path=config('CHROMEDRIVER_PATH'), chrome_options=option)因為,如果該按鈕Display不起作用,則可能沒有提到的sidebar按鈕,而是其他按鈕。所以我的問題是:有人遇到過類似的問題嗎?有沒有辦法知道駕駛員正在尋找這樣的元素時頁面顯示什么?
查看完整描述

3 回答

?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

據報告,在提供登錄信息后,元素未找到錯誤,因此我認為登錄失敗,頁面被重定向到某處。您可以使用截屏選項對頁面進行截屏,然后查看驅動程序加載到哪個頁面。

driver.save_screenshot("path to save screen.jpeg")

您也可以保存原始html代碼并檢查同一頁面。


查看完整回答
反對 回復 2021-04-09
?
qq_笑_17

TA貢獻1818條經驗 獲得超7個贊

每當我在Selenium中遇到這樣的奇怪問題時,我都希望重試以查找引起間歇性麻煩的特定元素。一種方法是將其包裝在try-except塊周圍:


try:

   sidebar = browser.find_element_by_xpath('//*[@id="sidebar"]/ul/li[1]/a')

except NoSuchElementException:

   time.sleep(10)

   print("Unable to find element in first time, trying it again")

   sidebar = browser.find_element_by_xpath('//*[@id="sidebar"]/ul/li[1]/a')

您還可以將try代碼與適當的count變量放入循環中,以使自動化代碼正常工作。(檢查此)。根據我在JAVA方面的經驗,這個想法已經解決了多個問題。


查看完整回答
反對 回復 2021-04-09
  • 3 回答
  • 0 關注
  • 229 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號