# 获取加载更多的数据有 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 动态网页的爬虫的更多相关文章

  1. Python爬虫 使用selenium处理动态网页

    对于静态网页,使用requests等库可以很方便的得到它的网页源码,然后提取出想要的信息.但是对于动态网页,情况就要复杂很多,这种页面的源码往往只有一个框架,其内容都是由JavaScript渲染出来的 ...

  2. 在python使用selenium获取动态网页信息并用BeautifulSoup进行解析--动态网页爬虫

    爬虫抓取数据时有些数据是动态数据,例如是用js动态加载的,使用普通的urllib2 抓取数据是找不到相关数据的,这是爬虫初学者在使用的过程中,最容易发生的情况,明明在浏览器里有相应的信息,但是在pyt ...

  3. 用selenium爬动态网页

    0-安装 我用python2.7,用pip安装selenium即可,phantomjs到官网下载安装,也不难. 1-主要参考的几篇文章 Python爬虫利器四之PhantomJS的用法 Python爬 ...

  4. selenium获取动态网页信息(某东)-具体配置信息

    需要安装的包: selenium 关于软件的驱动:selenium之 驱动环境配置chrome.firefox.IE 1 # encoding:utf-8 2 # Author:"richi ...

  5. Python开发爬虫之动态网页抓取篇:爬取博客评论数据——通过Selenium模拟浏览器抓取

    区别于上篇动态网页抓取,这里介绍另一种方法,即使用浏览器渲染引擎.直接用浏览器在显示网页时解析 HTML.应用 CSS 样式并执行 JavaScript 的语句. 这个方法在爬虫过程中会打开一个浏览器 ...

  6. 爬虫---selenium动态网页数据抓取

    动态网页数据抓取 什么是AJAX: AJAX(Asynchronouse JavaScript And XML)异步JavaScript和XML.过在后台与服务器进行少量数据交换,Ajax 可以使网页 ...

  7. 第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求

    第三百五十节,Python分布式爬虫打造搜索引擎Scrapy精讲—selenium模块是一个python操作浏览器软件的一个模块,可以实现js动态网页请求 selenium模块 selenium模块为 ...

  8. 爬虫(三)通过Selenium + Headless Chrome爬取动态网页

    一.Selenium Selenium是一个用于Web应用程序测试的工具,它可以在各种浏览器中运行,包括Chrome,Safari,Firefox 等主流界面式浏览器. 我们可以直接用pip inst ...

  9. 为采集动态网页安装和测试Python Selenium库

    1. 引言上一篇<为编写网络爬虫程序安装Python3.5>中测试小例子对静态网页做了一个简单的采集程序,而动态网页因为需要动态加载js获取数据,所以使用urllib直接openurl已经 ...

随机推荐

  1. centos 中文乱码解决办法2

    特别注意:vm10自带虚拟机共享工具,自动识别utf-8格式的中文文件内容 下面步骤摘自网络: 两种方案其实差不多,这里提供两个文件的下载地址,免得去网上搜这两个文件了: fonts-chinese- ...

  2. 【转】Mac下显示User下的资源Library

    在Mac OS 中Library文件夹是默认不显示的,这对普通用户来说是有好处的,可以防止用户误操作删除Library文件夹,但对于iOS的开发者来说是非常麻烦的,特别是ArcGIS Runtime ...

  3. python中编码判断

    https://www.cnblogs.com/lc-D-a/p/6074878.html python3 用isinstance()检查unicode编码报错

  4. Qt5 提示:无法启动此程序,计算机丢失Qt5Widgetsd.dll的解决方法

    Qt5工程编译生成可执行的exe文件之后,运行提示无法启动此程序,计算机丢失Qt5Widgetsd.dll… 原因是没有设置好Qt5的环境变量,解决方法如下: 1.打开[环境变量],(不同的系统会有不 ...

  5. 最小生成树 HihoCoder-1097、1098、1109(最小生成树算法)

    太久没写最小生成树了,快忘光了.这几天回顾了一下 最小生成树一·Prim算法 AC G++ 369ms 17MB #include "cstdio" using namespace ...

  6. 配置Oracle10g即时客户端plsql的配置

    看到网上有好多的Oracle客户端精简版本,但是这些都不是出自Oracle官方之手,难免可能会出现一些问题.经过我奋战一个小时终于搞定了这个 Oracle10g即时客户端 的配置了 1.先到Oracl ...

  7. Service层在MVC框架中的意义和职责

    https://blog.csdn.net/u012562943/article/details/53462157 mvc框架由model,view,controller组成,执行流程一般是:在con ...

  8. unittest(9)- 使用ddt给测试用例传参

    # 1. http_request.py import requests class HttpRequest: def http_request(self, url, method, data=Non ...

  9. Algorithms第3章及少量习题

    第三章的主要思想就是DFS.讲了图上的DFS操作,然后讲了各种应用.这章默认图都是用邻接矩阵存的. procedure explore(G, v) Input: G = (V, E) is a gra ...

  10. POJ 2112 Optimal Milking 最短路 二分构图 网络流

    题意:有C头奶牛,K个挤奶站,每个挤奶器最多服务M头奶牛,奶牛和奶牛.奶牛和挤奶站.挤奶站和挤奶站之间都存在一定的距离.现在问满足所有的奶牛都能够被挤奶器服务到的情况下,行走距离的最远的奶牛的至少要走 ...