python爬虫--selenium模块


Posted in Python onMarch 31, 2021

selenium模块

selenium基本概念

selenium优势

  • 便捷的获取网站中动态加载的数据
  • 便捷实现模拟登陆

selenium使用流程:

1.环境安装:

pip install selenium

2.下载一个浏览器的驱动程序(谷歌浏览器)

3.实例化一个浏览器对象

基本使用

代码

from selenium import webdriver
from lxml import etree
from time import sleep

if __name__ == '__main__':

    bro = webdriver.Chrome(r"E:\google\Chrome\Application\chromedriver.exe")
    bro.get(url='http://scxk.nmpa.gov.cn:81/xk/')

    page_text = bro.page_source
    tree = etree.HTML(page_text)
    li_list = tree.xpath('//*[@id="gzlist"]/li')
    for li in li_list:
        name = li.xpath('./dl/@title')[0]
        print(name)
    sleep(5)
    bro.quit()

基于浏览器自动化的操作代码

#编写基于浏览器自动化的操作代码

- 发起请求: get(url)

- 标签定位: find系列的方法

- 标签交互: send_ keys( 'xxx' )

- 执行js程序: excute_script('jsCod')

- 前进,后退: back(),forward( )

- 关闭浏览器: quit()

代码

https://www.taobao.com/

from selenium import webdriver
from time import sleep

bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")

bro.get(url='https://www.taobao.com/')

#标签定位
search_input = bro.find_element_by_id('q')
sleep(2)
#执行一组js代码,使得滚轮向下滑动
bro.execute_script('window.scrollTo(0,document.body.scrollHeight)')
sleep(2)
#标签交互
search_input.send_keys('女装')
button = bro.find_element_by_class_name('btn-search')
button.click()

bro.get('https://www.baidu.com')
sleep(2)
bro.back()
sleep(2)
bro.forward()
sleep(5)
bro.quit()

selenium处理iframe:

- 如果定位的标签存在于iframe标签之中,则必须使用switch_to.frame(id)

- 动作链(拖动) : from selenium. webdriver import ActionChains
	- 实例化一个动作链对象: action = ActionChains (bro)
	- click_and_hold(div) :长按且点击操作
	- move_by_offset(x,y)
	- perform( )让动作链立即执行
	- action.release( )释放动作链对象

代码

https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable

from selenium import webdriver
from time import sleep
from selenium.webdriver import ActionChains
bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")

bro.get('https://www.runoob.com/try/try.php?filename=jqueryui-api-droppable')

bro.switch_to.frame('iframeResult')

div = bro.find_element_by_id('draggable')

#动作链
action = ActionChains(bro)
action.click_and_hold(div)

for i in range(5):
    action.move_by_offset(17,0).perform()
    sleep(0.3)

#释放动作链
action.release()

bro.quit()

selenium模拟登陆QQ空间

代码

https://qzone.qq.com/

from selenium import webdriver
from time import sleep


bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe")
bro.get('https://qzone.qq.com/')
bro.switch_to.frame("login_frame")

switcher = bro.find_element_by_id('switcher_plogin')
switcher.click()

user_tag = bro.find_element_by_id('u')
password_tag = bro.find_element_by_id('p')
user_tag.send_keys('1234455')
password_tag.send_keys('qwer123')
sleep(1)

but = bro.find_element_by_id('login_button')
but.click()

无头浏览器和规避检测

代码

from  selenium import webdriver
from time import sleep
#实现无可视化界面
from selenium.webdriver.chrome.options import Options
#实现规避检测
from selenium.webdriver import ChromeOptions

#实现无可视化界面
chrome_options = Options()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--disable-gpu')
#实现规避检测
option = ChromeOptions()
option.add_experimental_option('excludeSwitches',['enable-automation'])

bro = webdriver.Chrome(executable_path=r"E:\google\Chrome\Application\chromedriver.exe",chrome_options=chrome_options,options=option)

bro.get('https://www.baidu.com')
print(bro.page_source)
sleep(2)
bro.quit()
Python 相关文章推荐
python海龟绘图实例教程
Jul 24 Python
在RedHat系Linux上部署Python的Celery框架的教程
Apr 07 Python
python实现将元祖转换成数组的方法
May 04 Python
Python处理字符串之isspace()方法的使用
May 19 Python
python如何通过protobuf实现rpc
Mar 06 Python
Python脚本实现Web漏洞扫描工具
Oct 25 Python
Python 遍历子文件和所有子文件夹的代码实例
Dec 21 Python
python机器学习理论与实战(一)K近邻法
Jan 28 Python
50行Python代码实现人脸检测功能
Jan 23 Python
对python字典过滤条件的实例详解
Jan 22 Python
Python实现序列化及csv文件读取
Jan 19 Python
python实现飞船游戏的纵向移动
Apr 24 Python
【超详细】八大排序算法的各项比较以及各自特点
pandas 操作 Excel操作总结
Mar 31 #Python
字典算法实现及操作 --python(实用)
如何利用python和DOS获取wifi密码
python爬虫selenium模块详解
Mar 30 #Python
python将图片转为矢量图的方法步骤
Mar 30 #Python
一文搞懂如何实现Go 超时控制
You might like
php shell超强免杀、减少体积工具实现代码
2012/10/16 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
CI框架网页缓存简单用法分析
2018/12/26 PHP
用javascript实现在小方框中浏览大图的代码
2007/08/14 Javascript
用JavaScript隐藏控件的方法
2009/09/21 Javascript
基于jQuery实现表格数据的动态添加与统计的代码
2011/01/31 Javascript
js控制的回到页面顶端goTop的代码实现
2013/03/20 Javascript
JavaScript 操作table,可以新增行和列并且隔一行换背景色代码分享
2013/07/05 Javascript
控制input输入框中提示信息的显示和隐藏的方法
2014/02/12 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
js函数内变量的作用域分析
2015/01/12 Javascript
深入理解JavaScript系列(47):对象创建模式(上篇)
2015/03/04 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
JavaScript基础篇(3)之Object、Function等引用类型
2015/11/30 Javascript
超详细的JS弹出窗口代码大全
2020/04/18 Javascript
JS二叉树的简单实现方法示例
2017/04/05 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
Vue批量图片显示时遇到的路径被解析问题
2019/03/28 Javascript
js数组相减简单示例【删除a数组所有与b数组相同元素】
2020/03/04 Javascript
原生js实现的金山打字小游戏(实例代码详解)
2020/03/16 Javascript
JavaScript获取时区实现过程解析
2020/09/24 Javascript
[04:27]2014DOTA2国际邀请赛 NAVI战队官方纪录片
2014/07/21 DOTA
[01:20]PWL开团时刻DAY9——听说潮汐没用?
2020/11/10 DOTA
[42:00]完美世界DOTA2联赛PWL S3 Phoenix vs INK ICE 第一场 12.13
2020/12/17 DOTA
Python中的类学习笔记
2014/09/23 Python
Python MySQLdb模块连接操作mysql数据库实例
2015/04/08 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
python 矩阵增加一行或一列的实例
2018/04/04 Python
python 把列表转化为字符串的方法
2018/10/23 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
详解通过focusout事件解决IOS键盘收起时界面不归位的问题
2019/07/18 HTML / CSS
年底个人总结范文
2015/03/10 职场文书
关于成立领导小组的通知
2015/04/23 职场文书
党支部评议意见
2015/06/02 职场文书
化验室安全管理制度
2015/08/06 职场文书
怎么禁用Windows 11快照布局? win11不使用快照布局的技巧
2021/11/21 数码科技