Python 使用selenium访问嵌套html代码中的元素
我试图使用selenium在我的网站中输入用户名和密码,但它进入超时异常Python 使用selenium访问嵌套html代码中的元素,python,selenium,Python,Selenium,我试图使用selenium在我的网站中输入用户名和密码,但它进入超时异常 File "C:\Python34\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until raise TimeoutException(message, screen, stacktrace) selenium.common.exceptions.TimeoutException: Message: 我尝试使用下面的代码访问我的用
File "C:\Python34\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:
我尝试使用下面的代码访问我的用户名(div id“id”和密码(div id“PSD”)
user = driver.find_element_by_id('Id')
及
任何帮助都将不胜感激
网站的HTML代码如下所示:
<div id="wrapper">
<div id="panel">
<table cellspacing="0" cellpadding="0" border="0" width="100%">
<tbody>
<tr>
<td>
<div class="panel_23">
<div id="msg" class="txt_red" style="display:none"></div>
<div class="User">
<div id="Id">
<input id="Malcom" name="Malcom"
style="width: 23px;" type="text"/>
</div>
</div>
<div class="PSS">
<div id="PSD">
<input id="Xmen" name="Xmen" style="width: 23px;"
type="pass"/>
</div>
</div>
<!-- <div class="txt56">Are you Logged </div> <div class="checkbox">
<input type="checkbox" id="c1" name="cc" /><label for="c1"><span></span>
</label></div> -->
</div>
</td>
</tr>
<tr>
<tr>
</tbody>
</table>
</div>
由于您使用的
显式等待
,您将获得TimeoutException
将显式等待用作:
user = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "Malcom"))
user.send_keys("username")
另一件事是,您正在访问div
标记而不是input
标记以访问用户名。要传递用户名,您必须访问用户名字段的input
标记
更新:
您的登录表单内容显示在iFrame
下,因此首先需要切换到框架,然后使用以下代码发送用户名和密码:
driver.get("http://xxxxxxxxxxxxxxxx")
driver.implicitly_wait(10)
driver.switch_to.frame(0) # frame located with index
driver.find_element_by_id("ext1").send_keys("username")
driver.find_element_by_id("ext2").send_keys("password")
driver.find_element_by_xpath("//div[@class='btn_Login']/input").click()
注意:请按照Python检查语法。我已经使用java完成了这项工作,并且在我这方面工作得很好由于您使用的是
显式等待,因此您得到了TimeoutException
将显式等待用作:
user = WebDriverWait(driver, 10).until( EC.visibility_of_element_located((By.ID, "Malcom"))
user.send_keys("username")
另一件事是,您正在访问div
标记而不是input
标记以访问用户名。要传递用户名,您必须访问用户名字段的input
标记
更新:
您的登录表单内容显示在iFrame
下,因此首先需要切换到框架,然后使用以下代码发送用户名和密码:
driver.get("http://xxxxxxxxxxxxxxxx")
driver.implicitly_wait(10)
driver.switch_to.frame(0) # frame located with index
driver.find_element_by_id("ext1").send_keys("username")
driver.find_element_by_id("ext2").send_keys("password")
driver.find_element_by_xpath("//div[@class='btn_Login']/input").click()
注意:请按照Python检查语法。我已经使用java完成了这项工作,并且在我这边工作得很好您可以提供您正在尝试刮取的网站吗?您可以提供您正在尝试刮取的网站吗?嗨,Narendra,它不工作,仍然是相同的超时异常。尝试使用By.NAME方式,但仍然是l相同。@Narendra我使用了user=WebDriverWait(driver,10)。直到(EC.visibility\u of_element\u located((By.ID,“Malcom”))和user=WebDriverWait(driver,10)。直到(EC.visibility\u of_element\u located((By.NAME,“Malcom”))我觉得我的元素无法被检测到。我还替换了“可见性”到“存在”,但没有用Hi Narendra..有什么想法吗..你想登录吗?因此你的元素出现在iframe
下,因此首先你需要使用driver在frame下切换。切换到.frame(0)
然后输入用户名和密码Hi Narendra,它不起作用,仍然是相同的超时异常。尝试使用By.NAME方式,但仍然是一样的。@Narendra我使用这些user=WebDriverWait(driver,10)。直到(EC.visibility\u of_element_located((By.ID,“Malcom”))和user=WebDriverWait(driver,10)。直到(EC.visibility\u of_element\u located((By.NAME,“Malcom”))我觉得我的元素无法被检测到。我还将“visibility”替换为“presence”“但是没有用Hi Narendra..知道吗..你想正确登录吗?因此你的元素出现在iframe
下,因此首先你需要使用驱动程序在frame下切换。切换到.frame(0)
,然后输入用户名和密码。”