selenium+chromdriver 动态网页的爬虫
# 获取加载更多的数据有 2 种方法
# 第一种就是直接找数据接口, 点击'加载更多' 在Network看下, 直接找到数据接口
# 第二种方法就是使用selenium+chromdriver
# selenium from selenium import webdriver
import time driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') time.sleep(5) driver.close() # 关闭页面
driver.quit() # 关闭整个浏览器
# selenium 定位元素 常用的6种
# find_element只获取满足条件的第一个, find_elements获取所有满足条件的 1.find_element_by_id
2.find_element_by_class_name
3.find_element_by_name
4.find_element_by_tag_name
5.find_element_by_xpath
6.find_element_by_css_selector ############################
from selenium import webdriver
import time
from lxml import etree driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 使用 xpath 方式获取 效率高 如果只是解析页面就使用这种
tree = etree.HTML(driver.page_source)
li_lists = tree.xpath('xxxxxxxxxx') # 通过id 的方式获取 如果对元素进行操作时,
# 比如要发送字符串, 点击按钮, 下拉操作 就使用这种方法
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('python') time.sleep(3)
driver.close() # 关闭页面
# driver.quit() # 关闭整个浏览器
# 常见的表单元素:
# input标签 type='text/password/email/number' 属于文本框
# button、input type='submit'
# checkbox type=‘checkbox’
# ###############
# 操作表单元素
# 1. 操作输入框
inputTag = driver.find_element_by_id('kw')
inputTag.send_keys('python')
time.sleep(3) # 2. 操作checkbox标签 豆瓣为例
rememberBtn = driver.find_element_by_name('remember')
rememberBtn.click() # 3. 操作select标签 要用Select类
from selenium import webdriver
from selenium.webdriver.support.ui import Select selectBtn = Select(driver.find_element_by_name('jumpMenu'))
selectBtn.select_by_index(1) # 通过index 选中下拉框里的选项
# selectBtn.select_by_visible_text('95秀客户端') 通过文本内容选中 # 4. 按钮的点击事件
inputTag = driver.find_element_by_id('kw') #拿到输入框按钮
inputTag.send_keys('python')
submitTag = driver.find_element_by_id('su') #拿到点击按钮
submitTag.click()
# selenium 的行为链 简单介绍 有时候页面中的操作有很多步,需要一系列操作
# 在爬虫中用的不多, 在测试用的多 from selenium import webdriver
import time
from selenium.webdriver.common.action_chains import ActionChains driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 拿到两个标签
inputTag = driver.find_element_by_id('kw')
submitBtn = driver.finr_element_by_id('su') actions = ActionChains(driver)
actions.move_to_element(inputTag)
actions.send_keys_to_element(inputTag,'python')
actions.move_to_element(submitBtn)
actions.click(submitBtn)
actions.perform()
# 在selenium中 cookies操作
# 1.获取所有的cookie
for cookie in driver.get_cookies():
print(cookie) # 2.根据cookie的key获取value
value = driver.get_cookie(key) # 3.删除所有的cookie
driver.delete_all_cookies() # 4.删除某一个cookie
driver.delete_cookie(key) #################################
from selenium import webdriver
import time driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') for cookie in driver.get_cookies(): # 获取的是百度域名下的所有cookie
print(cookie)
# 页面等待 重要 防止数据没有被加载就开始使用
# 因为页面很多用ajax技术,有时候要使用的数据没有加载出来,这时候使用就会报错.所以selenium提供两种等待方式 # 隐式等待: 调用driver.implicitly_wait. 那么获取不可用元素之前会先等待10秒时间.
driver = webdriver.Chrome(executble_path=driver_path)
driver.implicitly_wait(10) # 设置等待时间
driver.get('https://www.baidu.com/') #请求访问 # 显示等待:表明某个条件成立之后才执行获取元素的操作.
# 也可以在等待的时候制定一个最大的时间,如果超过这个时间那么久跑出异常.
# 显示等待使用selenium.webdriver.support.excepted_condition期望条件 和 selenium.webdriver.support.ui.webDriverWait配合完成
from selenium import webdriver
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 等待10秒后找这个对应的id标签, 因为是错误的所以等待10秒后报错
# 如果是正确的id 标签, 找到后直接继续执行, 不会等10 秒
WebDriverWait(driver,10).until(
EC.presence_of_element_located((By.ID,'shjdkah'))
)
# 打开多个窗口, 切换页面 重要 ****** from selenium import webdriver
import time driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path)
driver.get('https://www.baidu.com/') # 打开豆瓣
driver.execute_script('window.open("https://www.douban.com/")')
# 但是当前的driver还是停留在baidu页面
print(driver.current_url)
print(driver.window_handles) # 窗口句柄 看看现在打开的窗口有什么
driver.switch_to_window(driver.window_handles[1]) # 切换窗口
print(driver.current_url) # 虽然在窗口中切换到了新的页面,但是driver中还没有切换
# 如果想要在代码中切换到新的页面,并且做爬虫
# 那么应该使用dirver.switch_to_window来切换到指定的窗口
# 从dirver.window_handler中取出具体的第几个窗口
# driver.window_handlers是一个列表,里面装的都是窗口句柄
# 它会按照打开页面的顺序存储窗口句柄
# selenium 设置代理ip 主要是添加一个option参数就可以了 from selenium import webdriver # 设置代理
options = webdriver.ChromeOptions()
options.add_argument("--proxy-server-http://112.247.176.104:8060") driver_path = r"G:\Crawler and Data\chromedriver.exe"
driver = webdriver.Chrome(executable_path=driver_path,chrome_options=options)
driver.get('http://httpbin.org/ip')
selenium+chromdriver 动态网页的爬虫的更多相关文章
- Python爬虫 使用selenium处理动态网页
对于静态网页,使用requests等库可以很方便的得到它的网页源码,然后提取出想要的信息.但是对于动态网页,情况就要复杂很多,这种页面的源码往往只有一个框架,其内容都是由JavaScript渲染出来的 ...
- 在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫
爬虫抓取数据时有些数据是动态数据,例如是用js动态加载的,使用普通的urllib2 抓取数据是找不到相关数据的,这是爬虫初学者在使用的过程中,最容易发生的情况,明明在浏览器里有相应的信息,但是在pyt ...
- 用selenium爬动态网页
0-安装 我用python2.7,用pip安装selenium即可,phantomjs到官网下载安装,也不难. 1-主要参考的几篇文章 Python爬虫利器四之PhantomJS的用法 Python爬 ...
- selenium获取动态网页信息(某东)-具体配置信息
需要安装的包: selenium 关于软件的驱动:selenium之 驱动环境配置chrome.firefox.IE 1 # encoding:utf-8 2 # Author:"richi ...
- Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取
区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...
- 爬虫---selenium动态网页数据抓取
动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页 ...
- 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求
第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...
- 爬虫(三)通过Selenium + Headless Chrome爬取动态网页
一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...
- 为采集动态网页安装和测试Python Selenium库
1. 引言上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经 ...
随机推荐
- 关于AI行业创业的6个问题
第一个问题:互联网 vs 人工智能 首先如果今天大家选择创业,我建议更应该关注人工智能,而非互联网.为什么这么讲? 1. 互联网的流量红利已经消失: 以PC来说,全球PC出货量连续5年下滑.大家知道国 ...
- Java IO: Reader和Writer
作者: Jakob Jenkov 译者: 李璟(jlee381344197@gmail.com) Reader 原文链接 Reader是Java IO中所有Reader的基类.Reader与Input ...
- openssl内存分配,查看内存泄露
openssl内存分配 用户在使用内存时,容易犯的错误就是内存泄露.当用户调用内存分配和释放函数时,查找内存泄露比较麻烦.openssl提供了内置的内存分配/释放函数.如果用户完全调用openssl的 ...
- C语言学习笔记之字符串拼接的2种方法——strcat、sprintf
本文为原创文章,转载请标明出处 1. 使用strcat进行字符串拼接 #include <stdio.h> #include <stdlib.h> #include <s ...
- ClassNotFoundException: org.apache.commons.logging.Log
参考: https://bbs.csdn.net/topics/392090371 omcat无法启动,报如下错误: 严重: A child container failed during start ...
- <JZOJ5912>VanUSee
挺魔的 反正我考场上想不到233333333333333 #include<cstdio> #include<cstring> #include<iostream> ...
- SpringMVC在使用过程中的错误
HTTP Status 500 - Request processing failed; nested exception is org.springframework.validation.Bind ...
- SSM框架三分钟搞定分页查询
使用的国产第三方jar pagehelper 里面的基本属性值 //当前页 private int pageNum; //每页的数量 private int pageSize; //当前页的数量 ...
- 吴裕雄--天生自然KITTEN编程:角色移动
- 将js进行到底:node学习10
node.js数据库篇--MySQL NoSQL大行其道的如今,MySQL这样的关系型数据库依然有着不可撼动的位置,对于中型,大型面向对象的项目,关系型数据库依然是首选,真正的项目,应当是将数据库的任 ...