使用Selenium和Python登录页面

时间:2017-10-25 22:54:01

标签: python selenium selenium-webdriver selenium-chromedriver

我有一个网站,我保证没有人可以使用selenium登录 在这里: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"}``

我无法弄清楚为什么它找不到此页面中存在的元素。

2 个答案:

答案 0 :(得分:1)

如果仔细查看该文档,您会看到它由多个相互堆叠的框架组成。

<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&amp;tck=&amp;" 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')

答案 1 :(得分:0)

您的问题是您没有对您找到的元素做任何事情。

变化:

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()