浏览器更改时,Python Selenium无法找到元素

时间:2017-05-31 18:56:06

标签: python selenium

我正在编写脚本以使用Selenium自动填充某些字段。我遇到了问题,如果脚本点击了从原始网址导航的按钮,那么Python就无法在新网页上找到这些元素。

例如:如果我有selenium首先导航到此着陆页(https://www.emedny.org)并单击登录ePaces,然后尝试填写表单,我收到错误。这段代码是我运行的:

from selenium import webdriver

browser = webdriver.Chrome(path)

keyed_path = r'https://www.emedny.org'
browser.get(keyed_path)

epaces_login = browser.find_element_by_css_selector('#targetContainer > a:nth-child(3)')
epaces_login.click()

username = browser.find_element_by_id('Username')
username.send_keys('test')

此代码打开https://www.emedny.org,点击按钮将我们带到登录页面(https://www.emedny.org/epaces),应该输入用户名页。但是,我收到了这个错误:

NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"Username"}
  (Session info: chrome=56.0.2924.87)
  (Driver info: chromedriver=2.29.461591 (62ebf098771772160f391d75e589dc567915b233),platform=Windows NT 6.3.9600 x86_64)

但是,如果我跳过登录页面并直接打开登录页面,就像在此代码中一样:

from selenium import webdriver

browser = webdriver.Chrome(path)

keyed_path = r'https://www.emedny.org/epaces'
browser.get(keyed_path)

username = browser.find_element_by_id('Username')
username.send_keys('test')

然后代码运行良好,并按预期更新用户名字段。似乎Selenium可能只在打开网址上搜索该ID。

这里是用户名字段的HTML:

<input name="Username" type="text" maxlength="8" id="Username" class="inputText" size="13" onchange="javascript:validate(this)">

有什么建议吗?我已尝试过id,XPath,css选择器,名称等。每次都有相同的错误。

编辑:selenium首先点击的链接会打开一个新标签。这可能是问题的一部分吗?

1 个答案:

答案 0 :(得分:2)

我明白了。这是因为点击的链接打开了一个新标签。 Selenium正在搜索上一个标签上的元素。我像这样使用了switch_to_windowbrowser = webdriver.Chrome(path) keyed_path = r'https://www.emedny.org' browser.get(keyed_path) print(browser.window_handles) epaces_login = browser.find_element_by_css_selector('#targetContainer > a:nth-child(3)') epaces_login.click() browser.switch_to_window(browser.window_handles[1]) username = browser.find_element_by_id('Username') username.send_keys('test')

example123/users/photos/000/000/417/thumb/blob?1496258964