Selenium_博客已迁移外贸人该懂点儿技术 - Magento2 篇selenium + python专题

Selenium-Python 内置iframe的切换

2018-03-23  本文已影响40人  StillWater_7e10

前言

这几天在完成一个自己的项目,需要注册很多个邮箱。找了无数的邮箱提供商,都需要进行手机验证。最后发现一个比较好用,而且有多个(是真的有很多)域名可选的免费邮箱服务。
https://www.mail.com/mail/create-email-account/
本以为可以实现批量注册,结果遇到了google人机验证码,无奈放弃。不过对遇到的selenium知识点做一下记录

准备工作

通过观察发现,注册页面的url是包含一些参数的。

Screen Shot 2018-03-23 at 10.25.38 PM.png
那么最好不要直接点开账户注册页面,通过网站首页点击sign up进入注册页面,让URL自动携带这些参数。当然selenium是要使用IP代理的,前一篇文章有提到。
进入注册页面后,通过抓取随机身份平台的 人物信息,准备好需要注册的信息。https://www.fakepersongenerator.com/Index/generate

实现和过程中的问题问题

通过查看注册页面,我们发现,最能攻克的是google人机检测部分。


Screen Shot 2018-03-23 at 10.32.41 PM.png

可以猜测,这个验证应该是很难通过的,但是还是好奇的查看了一下html源码。


Screen Shot 2018-03-23 at 10.35.26 PM.png

发现人机验证是 通过内嵌的iframe展示的。

selenium可以在frame之间进行切换

browser.switch_to_frame('iframename')

但是有个尴尬的地方,这里iframe没有name的属性。
网上找了一下解决方法,发现竟然要修改selenium的核心代码,我的天,这个就操作不了了啊。

后面想了下,我是否可以用xpath先对frame进行定位,然后直接当做参数传递呢?代码如下:

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()

目标达成,实现了自动点击验证选框。
但是,新的问题又出现了:


Screen Shot 2018-03-23 at 10.45.15 PM.png

看来自己是想得太简单了,如果想实现这个验证,多半需要AI技术的支持了吧。
在此立个flag后面有机会再学习。

总结

虽然没有实现自己想要的效果,但是解决了一个小的技术问题。
对于内嵌iframe没有name\id属性时,可以通过xpath进行定位。

有朋友知道如何获取批量邮箱,如能告知,感激不尽------

上一篇下一篇

猜你喜欢

热点阅读