Python斷斷續續學了有一段時間了,總感覺不找個小項目練練手心里沒底,哪成想出門就遇到“攔路虎”,一個腳本剛寫完就運行報錯,還好做足了心里准備,嘗試自行解決。
或許網上有相關解決方案,不過畢竟自己親自上手實操了,有的問題還是有必要記錄下來加深印象,於是就有了這篇短文。
背景:訪問禪道首頁,通過第三方QQ賬號與密碼手動輸入登陸。
代碼:
1 # coding:utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Firefox() 6 driver.get('http://www.zentao.net/ ') 7 8 driver.find_element_by_link_text('登錄').click() 9 driver.find_element_by_class_name('qq').click() 10 driver.find_element_by_css_selector('#switcher_plogin').click() 11 driver.find_element_by_id('u').send_keys('*******') 12 driver.find_element_by_id('p').send_keys('*******') 13 driver.find_element_by_id('login_button').click() 14 time.sleep(10) 15 16 driver.quit()
學習了元素定位幾種方式,所以利用link_text 、 class_name 、 css_selector 、 id四種方式,不過執行時卻提示selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {"method":"css selector","selector":"#switcher_plogin"}
也就是說第10行代碼有問題,不能通過css_selector方式定位到"#switcher_plogin"這個元素。
雖然檢查了元素的唯一性,也嘗試通過其他如xpath 、 name等方式進行定位,但是使用運行到這塊報錯。仔細回想了之前看的示例登陸126郵箱的過程,有個iframe的方式進行定位,於是參考進行了嘗試。
不過由於對示例的沒有深入了解,照貓畫虎也出了糗。原例中查看是
,相應代碼是
driver.switch_to.frame('x-URS-iframe')
於是我在開頭代碼的第9至10行插入了相同代碼,結果可想而知,依然報錯,只是提示信息變成了Unable to locate element:x-URS-iframe。
這時候再來查看禪道第三方qq登陸的地方
,原來還是有區別的,於是修改相應的代碼為
driver.switch_to.frame('ptlogin_iframe')
此時再運行才正常通過。
雖然沒什么技術難度,但還得心細,了解代碼的真正含義,再去嘗試寫,不能照搬照抄。
最后附上完整代碼,為接下來的嘗試做准備~
1 # coding:utf-8 2 from selenium import webdriver 3 import time 4 5 driver = webdriver.Firefox() 6 driver.get('http://www.zentao.net/ ') 7 8 driver.find_element_by_link_text('登錄').click() 9 driver.find_element_by_class_name('qq').click() 10 driver.switch_to.frame('ptlogin_iframe') # 通過frame方式定位 11 driver.find_element_by_css_selector('#switcher_plogin').click() 12 driver.find_element_by_id('u').send_keys('*******') 13 driver.find_element_by_id('p').send_keys('*******') 14 driver.find_element_by_id('login_button').click() 15 time.sleep(10) 16 17 driver.quit()
