为了账号安全,请及时绑定邮箱和手机立即绑定

没有这样的元素:无法在生产环境中使用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 关注
  • 191 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信