Selenium-Python 内置iframe的切换

作者: StillWater_7e10 | 来源:发表于2018-03-23 22:50 被阅读40次

前言

这几天在完成一个自己的项目,需要注册很多个邮箱。找了无数的邮箱提供商,都需要进行手机验证。最后发现一个比较好用,而且有多个(是真的有很多)域名可选的免费邮箱服务。
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进行定位。

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

相关文章

  • Selenium-Python 内置iframe的切换

    前言 这几天在完成一个自己的项目,需要注册很多个邮箱。找了无数的邮箱提供商,都需要进行手机验证。最后发现一个比较好...

  • selenium - 如何在多个iframe以及多个tab之间切

    切换多个iframe: For example: ...... ....... 1. 切换iframe: driv...

  • selenium iframe切换

    /*** iframe切换**/ public void iframe(){driver.get("http://...

  • UI自动化(八)iframe和window切换

    一、iframe切换 以下介绍两种iframe切换方法 1、switch_to.frame() frame函数中提...

  • iframe 切换

    frame标签有frameset、frame、iframe三种,frameset跟其他普通标签没有区别,不会影响到...

  • 5:定位iframe

    2:定位iframe 1)有id的情况找到iframe,然后切换到iframe上,用到的方法是: driver.s...

  • 2018-05-18

    1.iframe切换 方法:switch_to_frame(frame_reference) iframe是在一个...

  • iframe切换路径导致页面回退失败

    今天遇到一个bug 页面中嵌入一个iframe,通过顶部tab切换来更改iframe的src路径值,切换看起来很正...

  • iframe表单切换

    1.web应用常用到iframe/frame,这些元素无法定位的情况下,我们需要先定位到表单,再定位元素,通过的方...

  • selenium切换iframe

    切换的条件:如果你要操作的元素,在iframe当中, 你才需要切换页面元素(容器)-里面是一个HTML页面 ifr...

网友评论

  • 36b5595a726c:看来你不太了解企业邮,比如我有abcd.com这个域名,可以在qq申请企业邮箱,然后就会有@abcd.com这个邮箱域名了,要多少用户自己生成,里边还有个功能就是,不存在的邮箱地址收到的邮件会转发到之前设置的邮箱地址
    StillWater_7e10:@那些花儿_699b 有链接吗,以前是Gmail Yahoo这些都能买,现在卖不到了
    36b5595a726c:@StillWater_7e10 哦,这样啊,我理解错了,那你可以买hotmail的邮箱,现在好像就这个最便宜了,三分一个
    StillWater_7e10:@那些花儿_699b 我运用的场景不一样,我自己有服务器和域名,也安了邮箱软件的,想要多少邮箱就可以生成多少邮箱,不要专门去申请企业邮。我是拿来批量注册国内网站的账户的,同一域名下,如果不是Gmail,Yahoo,这些大的服务商,注册后容易被管理发现,账户被封
  • 36b5595a726c:申请个域名,在弄个qq企业邮箱,在设置所有地址都转发,就有无限个邮箱了
    StillWater_7e10:@那些花儿_699b 需要大量邮箱用于注册账号,qq的不行,自己申请的域名安装邮箱软件也不行

本文标题:Selenium-Python 内置iframe的切换

本文链接:https://www.haomeiwen.com/subject/bodfcftx.html