【Python_Selenium学习笔记(三)】基于Selenium模块实现无界面模式 & 执行JS脚本(把滚动条拉到底部)

这篇具有很好参考价值的文章主要介绍了【Python_Selenium学习笔记(三)】基于Selenium模块实现无界面模式 & 执行JS脚本(把滚动条拉到底部)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于Selenium模块实现无界面模式 & 执行JS脚本(把滚动条拉到底部)

前言

此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 & 执行JS脚本(把滚动条拉到底部),并以具体的示例进行展示。

正文

1、Selenium 设置无界面模式

  1. 创建浏览器对象之前,创建 options 功能对象 :options = webdriver.ChromeOptions()
  2. 添加无界面功能参数:options.add_argument("--headless")
  3. 构造浏览器对象,打开浏览器,并设置 options 参数:browser = webdriver.Chrome(options=options)
from selenium import webdriver

options = webdriver.ChromeOptions()  # 创建浏览器对象之前,创建options功能对象
options.add_argument("--headless")  # 添加无界面功能参数
browser = webdriver.Chrome(options=options)  # 构造浏览器对象,打开浏览器

2、Selenium 执行JS脚本

  1. 创建浏览器对象:browser = webdriver.Chrome()
  2. 执行JS脚本:browser.execute_script()
  3. 最常用脚本 - 把滚动条拉到底部:browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
from selenium import webdriver

browser = webdriver.Chrome() # 创建浏览器对象
browser.execute_script(
    'window.scrollTo(0,document.body.scrollHeight)'
) # 把滚动条拉到最底部

3、Selenium 设置无界面模式 & 执行JS脚本 案例

3.1 需求分析

基于 Selenium + Chrome 抓取 `http://www.jd.com/` 下 “python书籍” 的信息

3.2 爬虫思路

  1. 打开浏览器输入主页地址:https://www.jd.com/
  2. 使用 Selenium 的 Xpath 找到 信息输入框 和 点击搜索 节点:'//*[@id="key"]' & '//*[@id="search"]/div/div[2]/button'
    selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫
    selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫
  3. 输入 “python书籍” 并点击 点击搜索按钮;
  4. 使用 Selenium 的 Xpath 找到 书籍信息 节点对象列表: '//*[@id="J_goodsList"]/ul/li'selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫
  5. 依次遍历每个元素,并依次提取每本书籍信息;
  6. 爬取完一页信息后,需要判断是否是最后一页
    selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫
    selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫
    可以看到:
    最后一页的节点信息为:pn-next disabled
    非最后一页的节点信息为:pn-next
  7. 如果不是最后一页,点击下一页继续进行爬取:'//*[@id="J_bottomPage"]/span[1]/a[9]'
    selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫

3.3 程序实现

  1. 初始化函数
    def __init__(self):
        # 设置为无界面
        self.options = webdriver.ChromeOptions()  # 创建浏览器对象之前,创建options功能对象
        self.options.add_argument('--headless')  # 添加无界面功能参数
        self.driver = webdriver.Chrome(options=self.options)  # 构造浏览器对象,打开浏览器
        self.driver.get(url="http://www.jd.com/")  # 进入主页
        # 搜索框发送:python书籍,点击搜索按钮
        self.inputJD = self.driver.find_element(By.XPATH, '//*[@id="key"]')  # 搜索框xpath://*[@id="key"]
        self.inputJD.send_keys("python书籍")
        self.driver.find_element(By.XPATH,
                                 '//*[@id="search"]/div/div[2]/button').click()  # 搜索按钮xpath://*[@id="search"]/div/div[2]/button 并点击
        time.sleep(1)  # 要给页面元素加载预留时间
  1. 提取数据函数
    def parse_html(self):
        """
        function:  具体提取数据方法
              in:  None
             out:  None
          return:  None
          others:  Data Extraction Func
        """
        self.driver.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )  # 先把滚动条拉到最底部,等待所有商品加载完成再进行数据爬取
        time.sleep(3)  # 给页面元素加载预留时间
        # 具体提取数据
        li_list = self.driver.find_elements(By.XPATH,
                                            '//*[@id="J_goodsList"]/ul/li')  # 基准xpath://*[@id="J_goodsList"]/ul/li 每一个商品对应一个li节点
        item = {}  # 定义一个空字典
        for li in li_list:
            item["名称"] = li.find_element(By.XPATH, './/div[@class="p-name"]/a/em').text.strip()
            item["价格"] = li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip()
            item["评价"] = li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip()
            item["商家"] = li.find_element(By.XPATH, './/div[@class="p-shopnum"]').text.strip()
            print(item)  # 打印
  1. 程序入口函数
    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        while True:
            self.parse_html()
            # 不是最后一页:pn-next
            # 最后一页:pn-next disabled
            if self.driver.page_source.find("pn-next disabled") == -1:  # 没有找到 pn-next disabled,说明不是最后一页
                self.driver.find_element(By.XPATH, '//*[@id="J_bottomPage"]/span[1]/a[9]').click()
                time.sleep(1)
            else:
                self.driver.quit()
                break

3.4 完整代码

import time
from selenium import webdriver
from selenium.webdriver.common.by import By


class JDSpider:
    def __init__(self):
        # 设置为无界面
        self.options = webdriver.ChromeOptions()  # 创建浏览器对象之前,创建options功能对象
        self.options.add_argument('--headless')  # 添加无界面功能参数
        self.driver = webdriver.Chrome(options=self.options)  # 构造浏览器对象,打开浏览器
        self.driver.get(url="http://www.jd.com/")  # 进入主页
        # 搜索框发送:python书籍,点击搜索按钮
        self.inputJD = self.driver.find_element(By.XPATH, '//*[@id="key"]')  # 搜索框xpath://*[@id="key"]
        self.inputJD.send_keys("python书籍")
        self.driver.find_element(By.XPATH,
                                 '//*[@id="search"]/div/div[2]/button').click()  # 搜索按钮xpath://*[@id="search"]/div/div[2]/button 并点击
        time.sleep(1)  # 要给页面元素加载预留时间

    def parse_html(self):
        """
        function:  具体提取数据方法
              in:  None
             out:  None
          return:  None
          others:  Data Extraction Func
        """
        self.driver.execute_script(
            'window.scrollTo(0,document.body.scrollHeight)'
        )  # 先把滚动条拉到最底部,等待所有商品加载完成再进行数据爬取
        time.sleep(3)  # 给页面元素加载预留时间
        # 具体提取数据
        li_list = self.driver.find_elements(By.XPATH,
                                            '//*[@id="J_goodsList"]/ul/li')  # 基准xpath://*[@id="J_goodsList"]/ul/li 每一个商品对应一个li节点
        item = {}  # 定义一个空字典
        for li in li_list:
            item["名称"] = li.find_element(By.XPATH, './/div[@class="p-name"]/a/em').text.strip()
            item["价格"] = li.find_element(By.XPATH, './/div[@class="p-price"]/strong').text.strip()
            item["评价"] = li.find_element(By.XPATH, './/div[@class="p-commit"]/strong').text.strip()
            item["商家"] = li.find_element(By.XPATH, './/div[@class="p-shopnum"]').text.strip()
            print(item)  # 打印

    def run(self):
        """
        function:  程序入口函数
              in:  None
             out:  None
          return:  None
          others:  Program Entry Func
        """
        while True:
            self.parse_html()
            # 不是最后一页:pn-next
            # 最后一页:pn-next disabled
            if self.driver.page_source.find("pn-next disabled") == -1:  # 没有找到 pn-next disabled,说明不是最后一页
                self.driver.find_element(By.XPATH, '//*[@id="J_bottomPage"]/span[1]/a[9]').click()
                time.sleep(1)
            else:
                self.driver.quit()
                break


if __name__ == '__main__':
    spider = JDSpider()
    spider.run()

3.5 实现效果

selenium滚动拉到底部,Python学习笔记,# Selenium学习笔记,python,selenium,爬虫文章来源地址https://www.toymoban.com/news/detail-734944.html

到了这里,关于【Python_Selenium学习笔记(三)】基于Selenium模块实现无界面模式 & 执行JS脚本(把滚动条拉到底部)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python_selenium: 元素定位不到的罪魁祸首之一:iframe

    背景:组内同事最近在写脚本,使用复制的xpath始终定位不到元素,报错内容:selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: {\\\"method\\\":\\\"xpath\\\",\\\"selector\\\":\\\"//table[text()=\\\'contentTable\\\']/tbody/tr/td[16]/a[2]/i\\\"} 解题思路: 1. 由于提供的html截图信息,发现存在多层body消息体拼

    2024年02月04日
    浏览(52)
  • 基于Selenium模块实现无界面模式 & 执行JS脚本

    此篇文章主要介绍如何使用 Selenium 模块实现 无界面模式 执行JS脚本(把滚动条拉到底部),并以具体的示例进行展示。 创建浏览器对象之前,创建 options 功能对象 : options = webdriver.ChromeOptions() 添加无界面功能参数: options.add_argument(\\\"--headless\\\") 构造浏览器对象,打开浏览器,并

    2024年02月13日
    浏览(41)
  • 基于python实现Web自动化测试(selenium)、API自动化测试(requests)&附学习视频

    另一篇文章 :自动化测试框架(pytest)附学习视频 学习视频,学习文档-白月黑羽 说明: 1紧跟着写的不加/,不加空格-表示同一级别信息,加空格表示后代 2.css定位tag,id,class时分别有不同的标识,其他属性都要加[]进行搜索, Xpath所有属性都要都加【】,tag不用 3. css在使用ta

    2024年02月03日
    浏览(108)
  • 学习笔记|基于Delay实现的LED闪烁|模块化编程|SOS求救灯光|STC32G单片机视频开发教程(冲哥)|第六集(下):实现LED闪烁

    在模块化编程里,函数使用分为如下三步: 返回值 函数名称( 入口参数 ) { 函数要执行的功能 } @返回值:没有返回值就是void @函数名称:避开(IDE中标蓝),不重复,非特殊字符随便取 @入口参数:类型+名称,多个参数“,”分开,空就写void 返回值 函数名称( 入口参

    2024年02月12日
    浏览(50)
  • Python爬虫学习笔记(七)————Selenium

    目录 1.什么是selenium? 2.为什么使用selenium? 3.selenium安装 4.selenium的使用步骤 5.selenium的元素定位 6.访问元素信息 7.交互 1.什么是selenium? (1)Selenium是一个用于Web应用程序测试的工具。 (2)Selenium 测试直接运行在浏览器中,就像真正的用户在操作一样。 (3)支持通过各种

    2024年02月16日
    浏览(37)
  • 【python】之selenium模块,实现Web端自动化测试!【基础篇】

    Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium 可以直接调用浏览器,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器),可以接收指令,让浏览器自动加载页面,获取需要的数据,甚至页面截屏等。我们可以使用selenium很容易完成之

    2024年02月06日
    浏览(46)
  • 【小5聊】Python3 使用selenium模块实现简单爬虫系列一

    第一次听说Python还是在工作的时候,还是一位女生在用,当时她说可以用来处理excel文档,特别是一些统计分析。第二次让我真正进入python世界,还是在一次C站举办的大赛上。聊聊你是因为什么机缘巧合进入到python圈的呢?不妨留言说说 本期主要是聊聊,我接触到的selenium模

    2024年02月06日
    浏览(73)
  • 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机

    《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第 2章感知机 《统计学习方法:李航》笔记 从原理到实现(基于python)-- 第1章 统计学习方法概论 我算是有点基础的(有过深度学习和机器学的项目经验),但也是半路出家,无论是学Python还是深度学习,都是从问

    2024年01月25日
    浏览(49)
  • 【Python_PyQtGraph 学习笔记(六)】基于GraphicsLayoutWidget 实现 曲线对象PlotDataItem 隐藏功能

    通过GraphicsLayoutWidget 可以绘制多条曲线。如果绘制多条曲线后,既想保存多条曲线的数据,又想显示其中一条曲线或几条曲线应该如何实现呢? 首先想通过GraphicsLayoutWidget 类提供的方法实现,但是PlotItem图形对象和PlotDataItem曲线对象都没有提供曲线的隐藏方法; 通过查看其源

    2023年04月08日
    浏览(56)
  • 【Python学习笔记(五)】csv模块的使用

    CSV是数据处理中经常会用到的一种文件格式,一般也被叫做逗号分隔值文件,是一种纯文本文件,使用特定的结构来排列表格数据,可以使用 Excel 软件或者文本文档打开 。 csv模块 是 python标准库模块,无需手动安装,可以直接导入 import csv # 导入csv模块 ,此篇文章介绍csv模

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包