知识点拾遗三(selenium)

前言

selenium的重要性不言而喻。面对动态网页普通爬虫不好用,接口要靠运气能找得到,只有selenium的实用性最强

selenium的关键知识点

获取和使用cookie实现自动登录

一个简单例子,扫码登录豆瓣保存cookie

browser.get('https://accounts.douban.com/passport/login?source=movie')
time.sleep(15)
# # 获取cookie并通过json模块将dict转化成str
# dictCookies = browser.get_cookies()
# jsonCookies = json.dumps(dictCookies)
# # 登录完成后,将cookie保存到本地文件
# with open('cookies.json', 'w') as f:
#     f.write(jsonCookies)
#  初次建立连接,随后方可修改cookie
browser.get('https://accounts.douban.com/passport/login?source=movie')
# 删除第一次建立连接时的cookie
browser.delete_all_cookies()
# 读取登录时存储到本地的cookie
with open('cookies.json', 'r', encoding='utf-8') as f:
    listCookies = json.loads(f.read())
for cookie in listCookies:
    browser.add_cookie({
        'domain': '.accounts.douban.com',  # 此处xxx.com前,需要带点
        'name': cookie['name'],
        'value': cookie['value'],
        'path': '/',
        'expires': None
    })
# 再次访问页面,便可实现免登陆访问
browser.get('https://movie.douban.com/')

很多网页需要selenium携带cookie才能访问,不同网页的cookie时效性也有差异,这个例子最是普遍实用。
扩展延伸
利用自动登录,实现自动抢票等软件的初步开发
关于requests和cookie

selenium元素定位

经实践总结
绝对路径
速度最快最方便,在检查里右键copy fullxpath,一般可定位。无法定位时有可能是嵌套网页或其它难点

元素属性
更多定位方法
少实践,可靠经验就少

滚动条

例子

time.sleep(2)
driver.execute_script('window.scrollTo(0,400)')

更多操作滚动条的方法

伪装手机端

*对付百度文库
*

url = "https://wenku.baidu.com/view/aa31a84bcf84b9d528ea7a2c.html"
options = webdriver.ChromeOptions()
# 伪装成iPhone
options.add_argument('--user-agent=Mozilla/5.0 (iPhone; CPU iPhone OS 5_0 like Mac OS X) AppleWebKit/534.46 (KHTML, like Gecko) Version/5.1 Mobile/9A334 Safari/7534.48.3')
driver = webdriver.Chrome(chrome_options=options)
driver.get(url)

伪装手机端就可以进行下一步爬虫了。否则,输入目标网址会先跳到文库首页,之后再操作定位就比较困难了

常用报错

NoSuchElementException: Message: Unable to locate element:

定位失败或页面未充分加载

selenium.common.exceptions.ElementClickInterceptedException: Message: element click intercepted:

目标元素在显示页面意外,操作滚动条即可

典型实例总结

  1. 豆瓣
  2. 百度文库
  3. 百度图片
  4. http://www.impawards.com/(未成功)
  5. 中国铁路网
  6. 知乎

猜你喜欢

转载自blog.csdn.net/qq_51598376/article/details/113788403