您现在的位置是:网站首页> 编程资料编程资料

python爬虫之selenium模块_python_

2023-05-26 405人已围观

简介 python爬虫之selenium模块_python_

一、什么是Selenium

selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Grid)。Selenium的核心Selenium Core基于JsUnit,完全由JavaScript编写,因此可以用于任何支持JavaScript的浏览器上。

selenium可以模拟真实浏览器,自动化测试工具,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。

二、selenium安装

用python写爬虫的时候,主要用的是selenium的Webdriver,我们可以通过下面的方式先看看Selenium.Webdriver支持哪些浏览器

from selenium import webdrive help(webdriver)

执行结果如下,从结果中我们也可以看出基本山支持了常见的所有浏览器:

NAME: selenium.webdriver

PACKAGE CONTENTS:

  • android (package)
  • blackberry (package)
  • chrome (package)
  • common (package)
  • edge (package)
  • firefox (package)
  • ie (package)
  • opera (package)
  • phantomjs (package)
  • remote (package)
  • safari (package)
  • support (package)
  • webkitgtk (package)

VERSION: 3.14.1

1、PhantomJS: 无可视化界面的浏览器(无头浏览器)

PhantomJS是一个而基于WebKit的服务端JavaScript API,支持Web而不需要浏览器支持,其快速、原生支持各种Web标准:Dom处理,CSS选择器,JSON等等。

PhantomJS可以用用于页面自动化、网络监测、网页截屏,以及无界面测试。

2、下载浏览器驱动

当selenium升级到3.0之后,对不同的浏览器驱动进行了规范。如果想使用selenium驱动不同的浏览器,必须单独下载并设置不同的浏览器驱动。

各浏览器下载地址:

:webdriver需要和对应的浏览器版本以及selenium版本对应。

查看驱动和浏览器版本的映射关系:

按照chrome版本对应的driver,直接按照浏览器版本去找对应的driver(只对应大版本就行)

下载之后,解压到任意目录(路径不要有中文)。

浏览器驱动文件,(win环境下载解压后得到的.exe文件)需要放到与python.exe同级目录中方能使用。或者配置电脑环境变量

可以手动创建一个存放浏览器驱动的目录,如: C:\driver , 将下载的浏览器驱动文件(例如:chromedriver、geckodriver)丢到该目录下。

我的电脑-->属性-->系统设置-->高级-->环境变量-->系统变量-->Path,将“C:\driver”目录添加到Path的值中。

三、selenium基本使用

1、声明浏览器对象

上面我们知道了selenium支持很多的浏览器,但是如果想要声明并调用浏览器则需要:

这里只写了两个例子,当然了其他的支持的浏览器都可以通过这种方式调用

from selenium import webdriver browser = webdriver.Chrome() # browser = webdriver.Firefox()

Headless方式启动

Headless Chrome 是 Chrome 浏览器的无界面形态,可以在不打开浏览器的前提下,使用所有 Chrome 支持的特性运行你的程序。相比于现代浏览器,Headless Chrome 更加方便测试 web 应用,获得网站的截图,做爬虫抓取信息等。相比于较早的 PhantomJS,SlimerJS 等,Headless Chrome 则更加贴近浏览器环境。

Headless Chrome 对Chrome版本要求:官方文档中介绍,mac和linux环境要求chrome版本是59+,而windows版本的chrome要求是60+,同时chromedriver要求2.30+版本。

from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriver.common.keys import Keys chrome_options = webdriver.ChromeOptions() # 使用headless无界面浏览器模式 chrome_options.add_argument('--headless') //增加无界面选项 chrome_options.add_argument('--disable-gpu') //如果不加这个选项,有时定位会出现问题 # 启动浏览器,获取网页源代码 browser = webdriver.Chrome(chrome_options=chrome_options) mainUrl = "https://www.taobao.com/" browser.get(mainUrl) print(f"browser text = {browser.page_source}") browser.quit()

2、访问页面

下面代码运行后,会自动打开Chrome浏览器,并登陆百度打印百度首页的源代码,然后关闭浏览器

from selenium import webdriver browser = webdriver.Chrome() browser.get("http://www.baidu.com") print(browser.page_source) browser.close()

3、查找元素

1、单个元素查找

browser.get(http://www.taobao.com) input_first = browser.find_element_by_id("q") input_second = browser.find_element_by_css_selector("#q") input_third = browser.find_element_by_xpath('//*[@id="q"]') print(input_first) print(input_second) print(input_third) browser.close()

这里我们通过三种不同的方式去获取响应的元素,第一种是通过id的方式,第二个中是CSS选择器,第三种是xpath选择器,结果都是相同的。 
结果如下:

常用的查找元素方法:

  • find_element_by_name:通过元素name定位
  • find_element_by_id:通过元素id定位
  • find_element_by_xpath:通过xpath表达式定位
  • find_element_by_link_text:通过完整超链接文本定位
  • find_element_by_partial_link_text:通过部分链接文本定位
  • find_element_by_tag_name:通过标签定位
  • find_element_by_class_name:通过类名进行定位
  • find_element_by_css_selector:通过css选择器进行定位

举例:

通过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")

xpath的使用方法

1. 第一种方法:通过绝对路径做定位(相信大家不会使用这种方式)

By.xpath(“html/body/div/form/input”)

2. 第二种方法:通过相对路径做定位,两个斜杠代表相对路径

By.xpath(“//input//div”)

3. 第三种方法:通过元素索引定位

By.xpath(“//input[4]”)

4. 第四种方法:使用xpath+节点属性定位(结合第2、第3中方法可以使用)

By.xpath(“//input[@id='kw1']”) By.xpath(“//input[@type='name' and @name='kw1']”)

5. 第五种方法:使用部分属性值匹配(最强大的方法)

By.xpath(“//input[start-with(@id,'nice')]”) By.xpath(“//input[ends-with(@id,'很漂亮')]”) By.xpath(“//input[contains(@id,'那么美')]”)

6. 第六种方法:使用前集中方法的组合

提示: 本文由整理自网络,如有侵权请联系本站删除!
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!

-六神源码网