selenuim模拟登陆搜狗问问

这是真原创,哈哈哈哈哈……

一:模拟登录并保存cookies

在弄这一块的过程中出现了好几个问题,比较基础但当时很头疼,这里写出来,和大家分享学习一下。
搜狗问问打开界面如下,点击登陆,选择qq账号密码登陆。
在这里插入图片描述源码如图
在这里插入图片描述

点击登陆

driver.find_element_by_xpath('//*[@id="s_login"]').click()

点击登陆后应该点击账号密码登陆,

driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()

但这个时候显示定位不到元素:
selenium.common.exceptions.NoSuchElementException: Message: no such element: Unable to locate element: {“method”:“xpath”,“selector”:"//*[@id=“switcher_plogin”]"}
可明明没有问题,却为什么这样呢。原因如下:
当点击登陆的时候,新生成了一个iframe框,只有先定位到iframe框后,才能定位想定位的标签元素。
在这里插入图片描述然后就先定位到iframe上,
在这里插入图片描述

driver.switch_to.frame('ptlogin_iframe')

照理说这个时候应该没有问题了,可还是报错,提示定位失败,哭了……

no such element: Unable to locate element: {“method”:“css selector”,“selector”:"[id=“ptlogin_iframe”]"}

折腾来折腾去,再看了一下代码,发现原来这个iframe外面还包着一个iframe,emmmm

那就先跳转到外层iframe。

driver.switch_to.default_content()
driver.switch_to.frame("login_iframe")
driver.switch_to.frame('ptlogin_iframe')
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()

完整代码如下:

import json,time

# 用户登陆并保存cookie
driver = webdriver.Chrome()
driver.implicitly_wait(10)
driver.get("https://wenwen.sogou.com/cate/tag/?ch=ww.dh.fly")

driver.find_element_by_xpath('//*[@id="s_login"]').click()
time.sleep(3)

driver.switch_to.default_content()
driver.switch_to.frame("login_iframe")
driver.switch_to.frame('ptlogin_iframe')
driver.find_element_by_xpath('//*[@id="switcher_plogin"]').click()

time.sleep(3)
driver.find_element_by_id("u").send_keys("10086")
time.sleep(3)
driver.find_element_by_id("p").send_keys("12456789")
time.sleep(3)
driver.find_element_by_id("login_button").click()
time.sleep(3)

cookies = driver.get_cookies()
with open("cookie.txt","w" ) as f:
    f.write(json.dumps(cookies))

二.利用cookies登陆搜狗问问

前面一节保存了cookies后,现在就直接利用cookie登陆。

代码如下

from selenium import webdriver
import json,time
url = 'https://wenwen.sogou.com/cate/tag/?ch=ww.dh.fly'
driver = webdriver.Chrome()
# driver.maximize_window()
driver.get(url)

# 使用cookies登陆
driver.delete_all_cookies()
f1 = open('cookie.txt')
cookie = json.loads(f1.read())
f1.close()
for c in cookie:
    if 'expiry' in c:
        del c['expiry']
    driver.add_cookie(c)

driver.refresh()

最后几行代码,要删除那个expiry字段,不然会报错

四、疑难杂症

对于类标签含有多个类的情况,可做如下处理。

driver.find_element_by_css_selector("[class = 'section  hide ']")

或者

driver.find_element_by_class_name('section,hide')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值