1. 程式人生 > 實用技巧 >selenium模擬登入豆瓣和qq空間

selenium模擬登入豆瓣和qq空間

selenium模擬登入豆瓣和qq空間
今天又重新學習了下selenium,模擬登入豆瓣,發現設定等待時間真的是很重要的一步,不然一直報錯:selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element
另外,豆瓣的主頁(https://www.douban.com/)使用了iframe嵌套了登入頁面:<iframe style="height: 300px; width: 300px;" frameborder='0' src="//accounts.douban.com/passport/login_popup?login_source=anony"></iframe>

,所以模擬登入的時候直接訪問登入頁面就好。

很多人學習python,不知道從何學起。
很多人學習python,掌握了基本語法過後,不知道在哪裡尋找案例上手。
很多已經做案例的人,卻不知道如何去學習更加高深的知識。
那麼針對這三類人,我給大家提供一個好的學習平臺,免費領取視訊教程,電子書籍,以及課程的原始碼!
QQ群:101677771

from selenium import webdriver
import time
driver=webdriver.Chrome(executable_path='D:/chromedriver.exe')
driver.get('https://accounts.douban.com/')
#driver.find_element_by_class_name('account-body-tabs').click()
driver.find_element_by_class_name('account-tab-account').click()
driver.find_element_by_id('username').clear()
driver.find_element_by_id('username').send_keys('username')
driver.find_element_by_id('password').clear()
driver.find_element_by_id('password').send_keys('password')
driver.find_element_by_class_name('account-form-field-submit').click()
#time.sleep(10)
driver.implicitly_wait(10) #設定隱式等待時間
driver.find_element_by_link_text('讀書').click()
#time.sleep(10)
driver.implicitly_wait(10)
driver.close()

原來selenium是有一個方法switch_to.frame可以切換到iframe框架的,那上面也可以直接從豆瓣主頁開始登入的。站在巨人肩膀上的感覺不錯呀。如果iframe沒有id和name屬性的話可以先通過tag定位。
下面利用switch_to.frame進行模擬qq空間的登入:

from selenium import webdriver
import time
driver=webdriver.Chrome(executable_path='D:/chromedriver.exe')
driver.maximize_window()
driver.get('https://i.qq.com/')
driver.switch_to.frame('login_frame')
driver.find_element_by_id('switcher_plogin').click()
driver.find_element_by_class_name('inputstyle').clear()
driver.find_element_by_class_name('inputstyle').send_keys('1555555')
driver.find_element_by_css_selector("[class='inputstyle password']").clear()
driver.find_element_by_css_selector("[class='inputstyle password']").send_keys('123456')
driver.find_element_by_id('login_button').click()  #後面還有一個拖動滑塊的安全驗證,還不會
print(driver.current_url) #可以檢視當前頁面的url
time.sleep(10)
driver.close()