Python爬虫学习笔记(九)——Selenium的使用

news/2024/7/19 11:54:02 标签: python, 爬虫, 前端

介绍

之前介绍了Ajax的分析和爬取方式,但是也不能解决全部问题。
比如中国青年网的分页部分使用JS生成的,并非原始HTML代码,ECharts中的图形都是经过JS计算之后生成的,淘宝的Ajax接口有很多加密参数。这些网站很难直接分析Ajax来抓取。为了解决这些问题,最直接的方式就是模拟浏览器运行,这样就可以做到在浏览器中看到是什么样,抓取的源码就是什么样。
今天就介绍一下Selenium的使用

正文

from selenium import webdriver

# 初始化
browser = webdriver.Chrome()
'''
browser = webdriver.Firefox()
browser = webdriver.Edge()
browser = webdriver.PhantomJS()
browser = webdriver.Safari()
'''
# 访问页面
browser.get('https://www.taobao.com')
# 输出源代码
print(browser.page_source)
# 查找单个节点,返回WebElement类型
input = browser.find_element(By.ID, 'q')
input = browser.find_element_by_id('q')
# 查找全部节点,返回list,每个元素都是WebElement类型
lis = browser.find_elements(By.CSS_SELECTOR, '.service-bd li')
lis = browser.find_elements_by_css_selector('.service-bd li')
# 节点交互
## 输入文字及清除文字
input.send_keys('iPhone')
inpur.clear()
input.send_keys('iPad')
## 点击按钮
button = browser.find_element_by_class_name('btn-search')
button.click()
# 动作链
## 例如鼠标拖拽、键盘按键等
browser.get('http://www.runoob.com/try/try.php?filename=jqueryul-api-droppable')
browser.switch_to.frame('iframeResult')
source = browser.find_element_by_css_selector('#draggable')
target = browser.find_element_by_css_selector('#droppable')
actions = ActionChains(browser)
actions.drag_and_drop(source, target)
actions.perform()
# 执行JavaScript
## 例如下拉进度条
browser.get('https://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0, document.body.scrollHeight)')
browser.execute_script('alert("To Bottom")')
# 获取节点信息
## 获取节点属性
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo.get_attribute('class'))
## 获取文本值
input = browser.find_element_by_class_name('zu-top-add-question')
print(input.text)
## 获取id、位置、标签名和大小
print(input.id)
print(input.location)
print(input.tag_name)
print(input.size)
# 切换Frame
# 延时等待
## 隐式等待
browser.implicitly_wait(10)
## 显式等待
# 前进和后退
# 选项卡管理
# 异常处理
# 关闭浏览器
browser.close()

看这章的时候,就明显感觉到自己前端知识基础不够扎实了,CSS选择器啥的不是很会,选节点基本是看书的,所以打算暂停,去补一下知识了。然后明天就正式上课了,weekdays的时候就没什么时间学额外的内容了,所以周末再更吧。顺便趁着这几天补一下前端知识。

总结

转载于:https://www.cnblogs.com/HackHarry/p/9614340.html


http://www.niftyadmin.cn/n/1774675.html

相关文章

2017-2018-2 20165313实验三 《敏捷开发与XP实践》

实验报告封面 实验内容及步骤 实验一 1.试验要求: 参考http://www.cnblogs.com/rocedu/p/6371315.html#SECCODESTANDARD安装alibaba 插件,解决代码中的规范问题。 在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化…

飞凌嵌入式OK6410按键设备驱动的模型

飞凌嵌入式OK6410按键设备驱动的模型包含以下几个点 (1)混杂设备驱动模型 按键是一种混杂设备,也是一种字符设备。 (2)linux中断处理技术 按键通过产生中断来让驱动程序加以识别。 (3)按键…

c++不同的命名空间访问的问题

在同一空间&#xff0c;有相同的命名&#xff0c;访问会发生冲突&#xff0c;相同的命名空间定义在不同的命名空间中&#xff0c;就可以避免冲突&#xff0c;灵活使用。 //命名空间--相同的命名&#xff0c;定义在不同的空间&#xff0c;就可以无冲突的访问 #include<iostre…

总线设备驱动模型

关键字&#xff1a;热插拔&#xff0c;跨平台移植性 随着技术的不断进步&#xff0c;系统的拓扑结构也越来越复杂&#xff0c;对热插拔&#xff0c;跨平台移植性的要求也越来越高&#xff0c;2.4内核已经难以满足嵌入式Linux技术这些需求。为适应这种形势的需要&#xff0c;从…

NodeJs第3方包说明

formidable作用&#xff1a;实现简单文件上传var formidable require(formidable);var form new formidable.IncomingForm();form.parse(req, function (err, fields) {//写入数据库db.insertOne("liuyanben", {"xingming" : fields.xingming,"liuy…

Ora-27300 OS system dependent operation:fork faile

1、环境描述 AIX 6.1 Oracle 11.2.0.1 2、问题描述应用连接到数据库后自动断开连接&#xff0c;业务无法正常使用。sqlplus / as sysdba 可以登录到数据库中。 3、报错信息Errors in file /u01/oracle/admin/orcl/bdump/orcl1_psp0_954436.trc:ORA-27300: OS system dependent …

基于平台总线的按键设备驱动

平台总线 将设备和驱动分离开来&#xff0c;便于移植&#xff0c;提供设备与驱动的匹配。 设备模块的程序 /*Copyright (c) 2018 Caokaipeng,All rights reserved.*/#include <linux/init.h> #include <linux/module.h> #include <linux/kernel.h> #inclu…

solidity编程规范

编程规范 概述 本指南用于提供编写Solidity的编码规范&#xff0c;本指南会随着后续需求不断修改演进&#xff0c;可能会增加新的更合适的规范&#xff0c;旧的不适合的规范会被废弃。 当然&#xff0c;很多项目可能有自己的编码规范&#xff0c;如果存在冲突&#xff0c;请参考…