【伪】解决动态id元素无法捕捉自动登录问题

Python 2.7
IDE Pycharm 5.0.3


原因

不止一个小伙伴告诉我,想模仿我的一键CSDN写博客想模拟登录qq或者网易邮箱,但是貌似用xpath和css都不行了,我尝试了一下,原来他们采用动态id了。所以直接定位id已经不能用了,但是xpath找来说应该只是路径,和具体变量无关吧,为什么还是不行呢?我现在尝试了网上若干方法,都不成功,所以我抖了个机灵~


解决方案

额,目前我没有找到根治的方法,但是有个取巧的方法,就是尝试不同的登陆端口,登录页面不一样只有一个对不,他们的程序员可能只想着最大的登录口设置反爬,科科,我可以绕啊。
比如说网易邮箱把,我们肯定一搜“网易邮箱”弹出第一个就点了对不对,中了圈套啊,你要记住,程序猿都是很懒的哈哈,我们点开第二个http://email.163.com/ 就可以了,直接xpath就ok,如果你选择第一个http://mail.163.com/ 这个的话,id就是动态的了,科科。qq邮箱同样道理,继续抖机灵~点击qq邮箱,然后右上角有个基本版,点击基本版,好啦,一样可爬,哈哈哈,程序猿,不要太偷懒啊


qq切换基本版


网页切换版本


代码

#登录网易邮箱
from selenium import webdriver
import time

print 'Please wait...Firefox loading...'
print '---------------------------------'
#reload(sys)

PostUrl ="http://email.163.com/#from=163nav_icon"

driver=webdriver.Firefox()#用浏览器实现访问
driver.get(PostUrl)

time.sleep(1)
#账号填充输入

driver.find_element_by_xpath(".//*[@id='idPlaceholder']").send_keys('xxxxxxx')
driver.find_element_by_xpath(".//*[@id='pwdPlaceholder']").send_keys('xxxxxxx')


#点击登录
click_login = driver.find_element_by_xpath(".//*[@id='btnSubmit']")

click_login.click()
print 'log in...'
print '---------------------------------'
time.sleep(1)


'''
driver.close()
'''

#登录qq邮箱

from selenium import webdriver
import time

print 'Please wait...Firefox loading...'
print '---------------------------------'
#reload(sys)

PostUrl ="https://ui.ptlogin2.qq.com/cgi-bin/login?style=9&appid=522005705&daid=4&s_url=https%3A%2F%2Fw.mail.qq.com%2Fcgi-bin%2Flogin%3Fvt%3Dpassport%26vm%3Dwsk%26delegate_url%3D%26f%3Dxhtml%26target%3D&hln_css=http%3A%2F%2Fmail.qq.com%2Fzh_CN%2Fhtmledition%2Fimages%2Flogo%2Fqqmail%2Fqqmail_logo_default_200h.png&low_login=1&hln_autologin=%E8%AE%B0%E4%BD%8F%E7%99%BB%E5%BD%95%E7%8A%B6%E6%80%81&pt_no_onekey=1"

driver=webdriver.Firefox()#用浏览器实现访问
driver.get(PostUrl)

time.sleep(1)
#账号填充输入

driver.find_element_by_xpath(".//*[@id='u']").send_keys('xxxxxxx')
driver.find_element_by_xpath(".//*[@id='p']").send_keys('xxxxxxx')


#点击登录
click_login = driver.find_element_by_xpath(".//*[@id='go']")

click_login.click()
print 'log in...'
print '---------------------------------'
time.sleep(1)


'''
driver.close()
'''

最后

在没有能力解决问题的时候,换个角度或许就可以了,哈哈。以后要是我知道怎么根治动态id的问题,我再来把【伪】字去掉。


致谢

@MrLeo520–一键CSDN写博客

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值