我正在编写一个脚本来自动使用Selenium填充某些字段。我遇到了一些问题,如果脚本点击了一个从原始URL导航的按钮,那么Python无法在新页面上找到这些元素。当浏览器发生变化时,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选择器,名称等。每次都有相同的错误。
编辑:硒点击首先打开一个新标签的链接。这可能是问题的一部分吗?
你试图找到当前'url'使用'browser.current_url'? – TheDarkKnight
反过来说,你可能需要'隐式地等待'浏览器。为进一步阅读:http://selenium-python.readthedocs.io/waits.html – TheDarkKnight
@SreetamDas我没有使用current_url,因为我认为这只是一种方式来访问URL为字符串。我会尝试等待方法。谢谢 –