捋了捋還有那些需要自動打卡的站點,
結果發現52pojie的qq自動登入,
只用find_element的話找不到程式碼,
原因是 frame 巢狀頁面的應用,
WebDriver 每次只能在一個頁面上識別元素。
這個時候就需要透過 switch_to.frame(),
將當前定位的主體切換到 frame 裡在定位元素。
- switch_to.frame() 預設可以直接取表單的 id 或 name 屬性進行切換。
#id = "if"
wd.switch_to.frame("if")
#name = "nf"
wd.switch_to.frame("nf")
- 那麼如果 iframe 沒有可用的 id 和 name 可以先定位frame
#先透過 xpth 定位到 iframe
xf = wd.find_element_by_xpath('//*[@class="if"]')
#再將定位物件傳給 switch_to_frame()方法
wd.switch_to_frame(xf)
wd.switch_to_default_content()
- 完成了當前表單的操作可透過switch_to.default_content()返回到上一層表單
QQ自動登入實現
def pojie():
wd.get('https://www.52pojie.cn/index.php')
# 跳轉qq登入介面
wd.find_element(By.XPATH,'//div[@class="fastlg_fm y"]/p/a').click()
wd.implicitly_wait(5)
# 切換到frame
wd.switch_to.frame('ptlogin_iframe')
# 定位快捷登入賬號
wd.find_element(By.XPATH,'//div[@id="qlogin_list"]/a').click()
sleep(5)
wd.find_element(By.XPATH,'//div[@id="um"]//p[2]/img').click()
# wd.implicitly_wait(10)
print('hifini.com簽到完成')
pojie()