python爬虫selenium和phantomJs使用方法解析
作者:一觉昏睡人 发布时间:2023-02-06 19:23:38
1.selenum:三方库。可以实现让浏览器完成自动化的操作。
2.环境搭建
2.1 安装:
pip install selenium
2.2 获取浏览器的驱动程序
下载地址:
http://chromedriver.storage.googleapis.com/index.html
http://npm.taobao.org/mirrors/chromedriver/
浏览器版本和驱动版本的对应关系表:
chromedriver版本 | 支持的Chrome版本 |
---|---|
v2.46 | v71-73 |
v2.45 | v70-72 |
v2.44 | v69-71 |
v2.43 | v69-71 |
v2.42 | v68-70 |
v2.41 | v67-69 |
v2.40 | v66-68 |
v2.39 | v66-68 |
v2.38 | v65-67 |
v2.37 | v64-66 |
v2.36 | v63-65 |
v2.35 | v62-64 |
v2.34 | v61-63 |
v2.33 | v60-62 |
v2.32 | v59-61 |
v2.31 | v58-60 |
v2.30 | v58-60 |
v2.29 | v56-58 |
v2.28 | v55-57 |
v2.27 | v54-56 |
v2.26 | v53-55 |
v2.25 | v53-55 |
v2.24 | v52-54 |
v2.23 | v51-53 |
v2.22 | v49-52 |
v2.21 | v46-50 |
v2.20 | v43-48 |
v2.19 | v43-47 |
v2.18 | v43-46 |
v2.17 | v42-43 |
v2.13 | v42-45 |
v2.15 | v40-43 |
v2.14 | v39-42 |
v2.13 | v38-41 |
v2.12 | v36-40 |
v2.11 | v36-40 |
v2.10 | v33-36 |
v2.9 | v31-34 |
v2.8 | v30-33 |
v2.7 | v30-33 |
v2.6 | v29-32 |
v2.5 | v29-32 |
v2.4 | v29-32 |
所有chromedriver均可在下面链接中下载到:
http://chromedriver.storage.googleapis.com/index.html
现在有一点好的是出了按照chrome版本对应的driver,直接按照浏览器版本去找对应的driver(只对应大版本就行),不用再费心去对应了,大家可以尝试一下
有些同学说下不了,到taobao下也是可以的:
http://npm.taobao.org/mirrors/chromedriver/
定位元素的8种方式:
#使用下面的方法,查找指定的元素进行操作即可
find_element_by_id 根据id找节点
find_elements_by_name 根据name找
find_elements_by_xpath 根据xpath查找
find_elements_by_tag_name 根据标签名找
find_elements_by_class_name 根据class名字查找
# 通过id定位:
dr.find_element_by_id("kw")
# 通过name定位:
dr.find_element_by_name("wd")
# 通过class name定位:
dr.find_element_by_class_name("s_ipt")
# 通过tag name定位:
dr.find_element_by_tag_name("input")
# 通过xpath定位,xpath定位有N种写法,这里列几个常用写法:
dr.find_element_by_xpath("//*[@id='kw']")
dr.find_element_by_xpath("//*[@name='wd']")
dr.find_element_by_xpath("//input[@class='s_ipt']")
dr.find_element_by_xpath("/html/body/form/span/input")
dr.find_element_by_xpath("//span[@class='soutu-btn']/input")
dr.find_element_by_xpath("//form[@id='form']/span/input")
dr.find_element_by_xpath("//input[@id='kw' and @name='wd']")
# 通过css定位,css定位有N种写法,这里列几个常用写法:
dr.find_element_by_css_selector("#kw")
dr.find_element_by_css_selector("[name=wd]")
dr.find_element_by_css_selector(".s_ipt")
dr.find_element_by_css_selector("html > body > form > span > input")
dr.find_element_by_css_selector("span.soutu-btn> input#kw")
dr.find_element_by_css_selector("form#form > span > input")
接下来,我们的页面上有一组文本链接。
<a class="mnav" href="http://news.baidu.com" rel="external nofollow" name="tj_trnews">新闻</a>
<a class="mnav" href="http://www.hao123.com" rel="external nofollow" name="tj_trhao123">hao123</a>
# 通过link text定位:
dr.find_element_by_link_text("新闻")
dr.find_element_by_link_text("hao123")
# 通过partial link text定位:
dr.find_element_by_partial_link_text("新")
dr.find_element_by_partial_link_text("hao")
dr.find_element_by_partial_link_text("123")
Selenium库下webdriver模块常用方法的使用
控制浏览器操作的一些方法
方法 说明
set_window_size() 设置浏览器的大小
back() 控制浏览器后退
forward() 控制浏览器前进
refresh() 刷新当前页面
clear() 清除文本
send_keys (value) 模拟按键输入
click() 单击元素
submit() 用于提交表单
get_attribute(name) 获取元素属性值
is_displayed() 设置该元素是否用户可见
size 返回元素的尺寸
text 获取元素的文本
---------------------
例子:
1.chrom浏览器自动搜索
from selenium import webdriver
from time import sleep
# 创建浏览器对象 驱动为浏览器的路径
bro = webdriver.Chrome("./chromedriver.exe")
url = "https://www.baidu.com"7 # 发送请求
bro.get(url)
# 让百度指定词条的搜索
text = bro.find_element_by_id('kw')
# 发送关键字
text.send_keys('python')
# 点击搜索按钮
button = bro.find_element_by_id('su')
button.click()
# 关闭浏览器
bro.quit()
2.phantomjs * 面浏览器,其自动化流程上述操作谷歌自动化流程一致。
from selenium import webdriver
from time import sleep
bro = webdriver.PhantomJS('E:/BaiduNetdiskDownload/爬虫课件/5. 动态数据加载
爬取\phantomjs‐2.1.1‐windows/bin/phantomjs.exe')
url = "https://www.baidu.com"
# 发送请求
bro.get(url)
bro.save_screenshot('./1.png')
# 让百度指定词条的搜索
text = bro.find_element_by_id('kw')
# 发送关键字
text.send_keys('python')
bro.save_screenshot('./2.png')
# 点击搜索按钮
button = bro.find_element_by_id('su')
button.click()
sleep(3)
bro.save_screenshot('./3.png')
# 关闭浏览器
bro.quit()
3.豆瓣网电影排行榜滚动条数据
from selenium import webdriver
from time import sleep3 url = 'https://movie.douban.com/typerank?type_name=%E5%96%9C%E5%89%A7&typ
e=24&interval_id=100:90&action='
bro = webdriver.PhantomJS('E:/BaiduNetdiskDownload/爬虫课件/5. 动态数据加载
爬取\phantomjs‐2.1.1‐windows/bin/phantomjs.exe')
bro.get(url)
sleep(1)
bro.save_screenshot("./1.png")
js = 'window.scrollTo(0,document.body.scrollHeight)'
# 执行js代码 滚动条
bro.execute_script(js)
sleep(1)
bro.save_screenshot('./2.png')
# 获取页面数据
page_source = bro.page_source
print(page_source)
来源:https://www.cnblogs.com/person1-0-1/p/11320755.html
猜你喜欢
- 假如公司需要统计每个员工的个人信息,制定好模板后,由员工填写,然后发送到综合部进行汇总,在这种情况下,如果公司有上百位员工的信息需要统计,且
- 习惯于使用数据库之前都必须创建一个连接池,即使是单线程的应用,只要有多个方法中需用到数据库连接,建立一两个连接的也会考虑先池化他们。连接池的
- 本文实例讲述了Python设计模式之MVC模式。分享给大家供大家参考,具体如下:一.简单介绍mvc模式 the mo
- 1.使用排序使数据有序通常,你的所有数据真正需要的仅仅是按某种顺序排列。SQL的ORDER BY语句可以以字母或数字顺序组织数据。因此,相似
- 原文地址:30 Days of Mootools 1.2 Tutorials - Day 22 - Fx.Elements通过
- 批量修改linux服务器密码,同时生成execl表格#!/usr/bin/env python#coding:utf8#随机生成自定义长度密
- 通过使用zabbix 日志监控 我发现一个问题 例如oracle的日志有报错的情况 ,通常不会去手动清理 这样的话当第二次有日志写进来的时候
- 本文实例为大家分享了JavaScript制作验证码的具体代码,供大家参考,具体内容如下<html><head><
- 代码如下import matplotlib.pyplot as pltimport numpy as npdef test4(): &nbs
- 1.单继承父类也叫基类子类也叫派生类如下所示,继承的关系:继承的书写格式:class 子类(父类):方法实例:class Animal: &
- 1、Python数据存储(压缩)(1)numpy.save , numpy.savez , scipy.io.savematnumpy和sc
- 本文实例讲述了PHP共享内存使用与信号控制。分享给大家供大家参考,具体如下:共享内存共享内存的使用主要是为了能够在同一台机器不同的进程中共享
- 我就废话不多说了,直接上代码吧!第一种def test1(): l = [] for i in range(1000
- 在Go语言中,我们可以使用for、append()和copy()进行数组拷贝,对于某些对性能比较敏感且数组拷贝比较多的场景,我们可以会对拷贝
- 1. 背景在深度学习的任务中,通常需要比较长时间的训练,因此我们会选择离开电脑。笔者在跟踪模型表现,观察模型accuracy 以及 loss
- 人工智能有多火,相信铺天盖地的新闻已经证实了这一点,不可否认,我们已经迎来了人工智能的又一次高潮。与前几次人工智能的飞跃相比,这一次人工智能
- tensorboard常用于更直观的观察数据在神经网络中的变化,或者用于观测已经构建完成的神经网络的结构。其有助于我们更加方便的去观测ten
- 目的:方便调试,查看中间结果,因为觉得设断点调试相对麻烦。【运行环境:macOS 10.13.3,PyCharm 2017.2.4】老手:选
- Vuex getters动态获取state的值在做项目时,getters里有很多冗余代码,但是仔细一看可以根据参数来解决,于是决定使用传参来
- **一 tf.concat( ) 函数–合并**In [2]: a = tf.ones([4,35,8]) &n