前言
這幾天在完成一個自己的項目纸泄,需要注冊很多個郵箱赖钞。找了無數(shù)的郵箱提供商,都需要進(jìn)行手機(jī)驗證聘裁。最后發(fā)現(xiàn)一個比較好用雪营,而且有多個(是真的有很多)域名可選的免費(fèi)郵箱服務(wù)。
https://www.mail.com/mail/create-email-account/
本以為可以實(shí)現(xiàn)批量注冊衡便,結(jié)果遇到了google人機(jī)驗證碼献起,無奈放棄洋访。不過對遇到的selenium知識點(diǎn)做一下記錄
準(zhǔn)備工作
通過觀察發(fā)現(xiàn),注冊頁面的url是包含一些參數(shù)的谴餐。
那么最好不要直接點(diǎn)開賬戶注冊頁面姻政,通過網(wǎng)站首頁點(diǎn)擊sign up進(jìn)入注冊頁面,讓URL自動攜帶這些參數(shù)岂嗓。當(dāng)然selenium是要使用IP代理的汁展,前一篇文章有提到。
進(jìn)入注冊頁面后厌殉,通過抓取隨機(jī)身份平臺的 人物信息食绿,準(zhǔn)備好需要注冊的信息。https://www.fakepersongenerator.com/Index/generate
實(shí)現(xiàn)和過程中的問題問題
通過查看注冊頁面年枕,我們發(fā)現(xiàn)炫欺,最能攻克的是google人機(jī)檢測部分。
可以猜測熏兄,這個驗證應(yīng)該是很難通過的品洛,但是還是好奇的查看了一下html源碼。
發(fā)現(xiàn)人機(jī)驗證是 通過內(nèi)嵌的iframe展示的摩桶。
selenium可以在frame之間進(jìn)行切換
browser.switch_to_frame('iframename')
但是有個尷尬的地方桥状,這里iframe沒有name的屬性。
網(wǎng)上找了一下解決方法硝清,發(fā)現(xiàn)竟然要修改selenium的核心代碼辅斟,我的天,這個就操作不了了啊芦拿。
后面想了下士飒,我是否可以用xpath先對frame進(jìn)行定位,然后直接當(dāng)做參數(shù)傳遞呢蔗崎?代碼如下:
import time
from selenium import webdriver
from selenium.webdriver.common.action_chains import ActionChains
browser = webdriver.Chrome()
browser.get('https://www.mail.com/mail/create-email-account/')
time.sleep(2)
# click signup
signUpButtom = browser.find_element_by_class_name('button-signup')
ActionChains(browser).click(signUpButtom).perform()
# switch to check frame
time.sleep(3)
iframe = browser.find_element_by_xpath('//div[@id="g-recaptcha-panel"]//iframe')
browser.switch_to_frame(iframe)
checkButtom = browser.find_element_by_class_name('recaptcha-checkbox-checkmark')
ActionChains(browser).click(checkButtom).perform()
browser.switch_to_default_content()
目標(biāo)達(dá)成酵幕,實(shí)現(xiàn)了自動點(diǎn)擊驗證選框。
但是缓苛,新的問題又出現(xiàn)了:
看來自己是想得太簡單了芳撒,如果想實(shí)現(xiàn)這個驗證,多半需要AI技術(shù)的支持了吧未桥。
在此立個flag后面有機(jī)會再學(xué)習(xí)笔刹。
總結(jié)
雖然沒有實(shí)現(xiàn)自己想要的效果,但是解決了一個小的技術(shù)問題冬耿。
對于內(nèi)嵌iframe沒有name\id屬性時舌菜,可以通過xpath進(jìn)行定位。
有朋友知道如何獲取批量郵箱淆党,如能告知酷师,感激不盡------