我正在编写脚本以使用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首先点击的链接会打开一个新标签。这可能是问题的一部分吗?
答案 0 :(得分:2)
我明白了。这是因为点击的链接打开了一个新标签。 Selenium正在搜索上一个标签上的元素。我像这样使用了switch_to_window
和browser = 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