[英]Login to page with Selenium and Python
我有一个网站,我保证没有人可以使用硒登录到这里: https : //edu.usc.ac.ir/Forms/AuthenticateUser/main.htm
该页面的代码与您看到的代码不同,我希望使用Selenium对其进行爬网。
我写下面的代码:
from selenium import webdriver
import time
url = "https://edu.usc.ac.ir/Forms/AuthenticateUser/main.htm"
driver = webdriver.Chrome('chromedriver.exe')
driver.get(url)
time.sleep(5)
username = driver.find_element_by_id("F80351")
password = driver.find_element_by_id("F80401")
当我使用此代码时,出现以下错误:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {"method":"id","selector":"F80351"}``
我不知道为什么找不到该页面中存在的元素。
如果仔细看一下文档,您会发现它由相互堆叠的几个框架组成。
<body ...>
...
<div id="FacArea" style="top: 48px; position: absolute; overflow: hidden; width: 672px; height: 572px;">
<div style="overflow: auto; position: absolute; z-index: 2; width: 672px; height: 572px;">
<iframe src="nav.htm?fid=0;1&tck=&" id="Faci1" name="Faci1" width="672" height="572" style="z-index: 2;">
#document
<html>
...
</html>
</iframe>
</div>
</div>
...
</body>
您的用户名和密码输入位于3帧深的文档中,这就是为什么找不到它们的原因。 您需要迭代找到那些框架并切换到它们。
driver = webdriver.Chrome('chromedriver.exe')
driver.get(url)
frame_names = ('Faci1', 'Master', 'Form_Body')
for name in frame_names:
frame = driver.find_element_by_name(name)
driver.switch_to_frame(frame)
username = driver.find_element_by_id('F80351')
password = driver.find_element_by_id('F80401')
您的问题是您没有对找到的元素做任何事情。
更改:
username = driver.find_element_by_id("F80351")
password = driver.find_element_by_id("F80401")
至:
driver.find_element_by_id("F80351").send_keys('your username')
driver.find_element_by_id("F80401").send_keys('your password')
driver.find_element_by_id("btnLog").click()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.