Python爬虫04:Selenium库

Selenium环境的安装

浏览器驱动的安装

要想使用Selenium驱动浏览器,就要先安装对应版本的浏览器驱动.对于Chrome浏览器,其驱动的下载位置为https://sites.google.com/a/chromium.org/chromedriver/home.

下载好驱动后,我们要将驱动所在位置加入到系统路径PATH中.

安装Selenium库

使用pip install selenium即可安装selenium.

启动浏览器窗口

创建selenium.webdriverChrome对象,即可开启一个浏览器窗口,并返回一个句柄用以操作该浏览器.

from selenium import webdriver
driver = webdriver.Chrome()

在这里插入图片描述

Selenium的基本操作

下面介绍Selenium库的基本操作,具体内容请参考Selenium官方文档.

创建浏览器句柄

下面三种方式都可以创建浏览器句柄.

  1. 若chromedriver已被添加到路径,则可直接调用Chrome类的构造函数.

    from selenium import webdriver
    driver = webdriver.Chrome()
    
  2. 若chromedriver没有被添加到路径,则调用Chrome类的构造函数需要指定该驱动文件所在路径.

    from selenium import webdriver
    driver = webdriver.Chrome(executable_path='/home/user/chromedirver')
    
  3. 要使用无界面模式启动浏览器,则需要向构造函数传入一个Option参数指定以无界面模式启动

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    option = Options()
    option.add_argument('--headless')
    driver = webdriver.Chrome(chrome_options=option)
    

    以无界面模式启动浏览器时,不会显示浏览器窗口.可以使用driver对象的save_screenshot()方法对当前窗口进行截图.

控制浏览器

  1. 访问网址

    driver.get('https://www.baidu.com')
    
  2. 控制浏览器的前进后退

    driver.refersh()	# 刷新页面
    driver.forward()	# 前进页面
    driver.back()		# 后退页面
    
  3. 退出浏览器

    driver.quit()		# 关闭浏览器窗口并销毁driver对象
    
  4. 获取页面的状态

    driver.current_url	# 返回 页面的URL
    driver.page_source	# 返回 页面源码
    
    driver.get_cookie('BAIDUID')	# 返回 指定名字的cookies
    driver.get_cookies()			# 返回 所有cookies的列表
    
  5. 执行javascript代码

    # 同步执行js代码
    driver.execute('window.scrollTo(0, document.body.scrollHeight)')	
    
    # 异步执行js代码
    driver.execute_async_script('send_xml_request()')
    

    通过执行js代码将页面拉至指定位置,可以防止由于懒加载导致查询不到元素的问题

  6. 等待页面元素

    在使用WebDriverfind_xxx方法找不到某元素时会报错,而这可能与网速有关.因此,在查询元素的时候,应尽量使用等待.

    • 隐式等待: 阻塞指定时间(单位为秒)直到下一个查找语句得到结果.若超过阻塞时间仍得不到指定元素则报错.

      driver.implicityly_wait(10)		# 阻塞最多10秒以得到下个查找语句的结果
      
    • 显式等待: 阻塞指定时间(单位为秒)直到查询结果满足指定条件.

      from selenium.webdriver.support.ui import WebDriverWait
      from selenium.webdriver.support import expected_conditions as EC
      from selenium.webdriver.common.by import By
      
      # 阻塞最多10秒直到driver句柄查到的结果存在
      sort_btn = WebDriverWait(driver, 10).until(
          EC.presence_of_element_located((By.XPATH, './/div[@class="f-sort"]/a[2]'))
      )
      

      expected_conditions包内定义了很多见名知义的条件,常用的有presence_of_element_located,element_to_be_clickable,element_to_be_selected,presence_of_all_elements_located等.

  7. 截图

    driver.save_screenshot('./screenshot/image1.png')	# 截图到文件./screenshot/image1.png中
    

查找元素

浏览器句柄WebDriver对象有18个以find_xxx开头的方法,可以根据返回值的类型分为两类.find_element_by_xxx()方法返回以WebElement对象的形式返回第一个匹配的页面元素,find_elements_by_xxx()方法以WebElement列表的形式返回所有匹配的页面元素对象.

方法查询条件
find_element_by_class_name()
find_element_by_class_name()
根据节点的类名查找
find_element_by_id()
find_element_by_id()
根据节点的id查找
find_element_by_name()
find_element_by_name()
根据节点的name属性查找
find_element_by_tag_name()
find_element_by_tag_name()
根据节点的标签名查找
find_element_by_link_text()
find_element_by_link_text()
根据链接的文本查找
find_element_by_partial_link_text()
find_element_by_partial_link_text()
根据链接的文本进行模糊查找
find_element_by_css_selector()
find_element_by_css_selector()
根据CSS选择器语法查找
find_element_by_xpath()
find_element_by_xpath()
根据XPath语法查找

操作页面元素

页面元素WebElement对象存在如下属性和方法,可以对页面元素进行操作

  1. 查找子元素:

    WebDriver完全相同,WebElement有一系列find_xxx()方法,用来在子元素中查找元素.

  2. 查询元素状态:

    • 查询元素的文本内容

      web_element.text
      
    • 查询元素的属性

      web_element.get_attribute('id')
      
      web_element.get_attribute('href')
      
    • 查询元素的CSS属性

      web_element.value_of_css_property('height')
      
    • 查询元素的坐标

      web_element.rect		# 得到 {'height': 220, 'width': 220, 'x': 200, 'y': 628}
      web_element.location	# 得到 {'x': 200, 'y': 628}
      
  3. 操作元素:

    • 点击元素

      web_element.click()
      
    • 向可写入元素发送键盘事件

      from selenium.webdriver.common.keys import Keys	# 导入特殊键 
      
      input_web_element.send_keys('keys')				# 写入字符串'keys'
      input_web_element.send_keys(Keys.RETURN)		# 写入回车键
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值