python selenium模拟登陆163邮箱。
selenium是可以模擬瀏覽器操作。
有些爬蟲是異步加載的,通過爬取網(wǎng)頁源碼是得不到需要的內(nèi)容。所以可以模擬瀏覽器去登陸該網(wǎng)站進(jìn)行爬取操作。
需要安裝selenium通過pip install xxx安裝,如果你使用的Anaconda3,可以使用conda install xxx這些都是可以
值得一提的是,需要下載chromdriver,就是chrome瀏覽器的驅(qū)動。百度搜索下載,下載之前看你的chrome的版本是幾,應(yīng)該下載比你瀏覽器的版本更高的驅(qū)動版本。
比如:我的chrome是74,那么你可以下載74以后的,75等。
然后把chromedriver放在python安裝程序主目錄下,
也就是說,你的python.exe在哪個目錄,你把chromedriver放在那就可以了。
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
"""
使用selenium進(jìn)行模擬登陸
1.初始化ChromDriver
2.打開163登陸頁面
3.找到用戶名的輸入框,輸入用戶名
4.找到密碼框,輸入密碼
5.提交用戶信息
"""
name = 'xxxxxxxx'
passwd = 'xxxxxx'
driver = webdriver.Chrome()
driver.get('https://mail.163.com/')
# 將窗口調(diào)整最大
driver.maximize_window()
# 休息5s
time.sleep(5)
current_window_1 = driver.current_window_handle
print(current_window_1)
button = driver.find_element_by_id('lbNormal')
button.click()
driver.switch_to.frame(driver.find_element_by_xpath("http://iframe[starts-with(@id, 'x-URS-iframe')]"))
email = driver.find_element_by_name('email')
#email = driver.find_element_by_xpath('//input[@name="email"]')
email.send_keys(name)
password = driver.find_element_by_name('password')
#password = driver.find_element_by_xpath("http://input[@name='password']")
password.send_keys(passwd)
submit = driver.find_element_by_id("dologin")
submit.click()
time.sleep(10)
print(driver.page_source)
driver.quit()
問題:
在使用過程中,始終iframe這個元素,提示driver.find_element_by_name找不到。
然后通過chrome的開發(fā)者工具,找了iframe.如下圖:
郵箱輸入框和密碼輸入框在iframe中。但是這個iframe id="x-URS-iframe156xxxxxx"后面的數(shù)字是一個時間戳。是唯一的,而且name竟然也是設(shè)置為“”,
所以通過driver.find_element_by_name通過屬性獲取或者driver.find_element_by_id通過id獲取都是提示找不到。
那該怎么辦???
driver.find_element_by_xpath("http://iframe[starts-with(@id, 'x-URS-iframe')]")
通過使用xpath獲取,并且是ids屬性是“x-URS-iframe”開頭的,就可以動態(tài)的獲取這個iframe。
問題來了,為什么要獲取iframe。
因為看代碼有一個
driver.switch_to.frame()
切換界面,因為通過開發(fā)者工具可以看到,輸入密碼和用戶名都是在iframe下,如果不切換到這個iframe.那么始終是找不到。
還有一個問題就是,
通過瀏覽器登陸163,開始顯示的是一個掃描QRcode二維碼進(jìn)入郵箱。我們想要的是輸入郵箱和密碼的界面。
所以代碼中:
button = driver.find_element_by_id('lbNormal')
button.click()
這個就是獲取切換的界面的按鈕,點擊切換到輸入界面。
以下是模擬,僅供參考
總結(jié)
以上是生活随笔為你收集整理的python selenium模拟登陆163邮箱。的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: zabbix配置psk加密
- 下一篇: mysql 查看服务器正在运行的进程