使用Selenium抓取网页动态内容

这篇具有很好参考价值的文章主要介绍了使用Selenium抓取网页动态内容。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Selenium 介绍

Selenium 是一个自动化测试工具,支持多种浏览器,包括 Chrome、Firefox、Edge 等,具有强大的浏览器自动化能力,可以用于Web应用程序的自动化测试、数据挖掘等领域。Selenium的主要特点有:

支持多种浏览器

Selenium支持多种浏览器,包括Chrome、Firefox、Edge、Safari等,可以满足不同用户的需求。

多种编程语言支持

Selenium支持多种编程语言,如Python、Java、Ruby等,用户可以选择自己熟悉的编程语言进行开发。

自动化表单填写、模拟点击、页面滚动等操作

使用Selenium,用户可以自动化进行表单填写、模拟点击、页面滚动等操作,可以大大提高工作效率。

处理JavaScript、Ajax、动态页面等特殊情况

Selenium可以处理JavaScript、Ajax、动态页面等特殊情况,可以更好地模拟用户行为。

模拟用户行为,处理弹窗、Alert等特殊情况

Selenium可以模拟用户行为,如鼠标移动、键盘输入等,并可以处理弹窗、Alert等特殊情况,可以更加贴近真实用户的使用情况。

使用 Selenium

安装

如果你使用的是 Python,可以通过 pip 安装 Selenium:

pip install selenium

同时还需要安装浏览器驱动,比如 Chrome 驱动,可以从官方网站下载。下载后解压缩,把 chromedriver.exe 文件放到 Python 的安装目录下即可,例如 C:\Python39。

基本操作

通过 Selenium 可以模拟用户在浏览器中的行为,例如打开指定的网页、填写表单、点击按钮等。下面的代码演示了如何使用 Selenium 打开百度首页,并在搜索框中输入“Python”,然后点击“百度一下”按钮,最后截屏保存结果。

from selenium import webdriver

# 创建 Chrome 浏览器对象
browser = webdriver.Chrome()

# 加载页面
browser.get('<https://www.baidu.com>')

# 找到搜索框并输入关键字
kw_input = browser.find_element_by_id('kw')
kw_input.send_keys('Python')

# 找到“百度一下”按钮并点击
su_button = browser.find_element_by_id('su')
su_button.click()

# 截屏并保存结果
browser.get_screenshot_as_file('baidu_result.png')

# 关闭浏览器
browser.quit()

等待页面元素

在使用 Selenium 时,我们需要注意网页中的元素可能是动态生成的,在我们使用find_elementfind_elements方法获取的时候,可能还没有完成渲染,这时会引发NoSuchElementException错误。为了解决这个问题,我们可以使用隐式等待的方式,通过设置等待时间让浏览器完成对页面元素的渲染。除此之外,我们还可以使用显示等待,通过创建WebDriverWait对象,并设置等待时间和条件,当条件没有满足时,我们可以先等待再尝试进行后续的操作,具体的代码如下所示。

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

# 创建 Chrome 浏览器对象
browser = webdriver.Chrome()

# 加载页面
browser.get('<https://www.baidu.com>')

# 设置隐式等待时间为10秒
browser.implicitly_wait(10)

# 找到搜索框并输入

元素定位

在使用Selenium时,元素定位是非常重要的操作。通过元素定位,可以找到需要操作的元素,并进行后续的操作。Selenium支持多种元素定位方式,如下所示:

ID

elem = driver.find_element_by_id("id")

Name

elem = driver.find_element_by_name("name")

Class Name

elem = driver.find_element_by_class_name("class")

Tag Name

elem = driver.find_element_by_tag_name("tag")

Link Text

elem = driver.find_element_by_link_text("text")

Partial Link Text

elem = driver.find_element_by_partial_link_text("text")

CSS Selector

elem = driver.find_element_by_css_selector("selector")

XPath

elem = driver.find_element_by_xpath("xpath")

API参考

Selenium提供了丰富的API,使得用户可以灵活地进行自动化测试和数据挖掘等操作。下面是一些常用的API:

WebDriver API

WebDriver API是Selenium的核心API,提供了浏览器控制相关的操作。常用方法如下所示:

get(url)

加载指定的URL。

browser.get('<http://www.baidu.com>')

back()

返回上一页。

browser.back()

forward()

前进到下一页。

browser.forward()

refresh()

刷新当前页面。

browser.refresh()

close()

关闭当前窗口。

browser.close()

quit()

退出浏览器。

browser.quit()

WebElement API

WebElement API提供了对页面元素的操作。常用方法如下所示:

click()

点击元素。

elem = browser.find_element_by_id('button')
elem.click()

send_keys()

向元素发送文本。

elem = browser.find_element_by_id('input')
elem.send_keys('Hello, World!')

clear()

清空元素文本。

elem = browser.find_element_by_id('input')
elem.clear()

get_attribute(name)

获取元素的属性值。

elem = browser.find_element_by_id('input')
attr_value = elem.get_attribute('name')

is_displayed()

判断元素是否对于用户可见。

elem = browser.find_element_by_id('input')
is_visible = elem.is_displayed()

is_enabled()

判断元素是否处于可用状态。

elem = browser.find_element_by_id('button')
is_enabled = elem.is_enabled()

is_selected()

判断元素(单选框和复选框)是否被选中。

elem = browser.find_element_by_id('checkbox')
is_selected = elem.is_selected()

value_of_css_property(property_name)

获取指定的CSS属性值。

elem = browser.find_element_by_id('button')
color = elem.value_of_css_property('color')

find_element(by=By.ID, value=None)

获取单个子元素。

elem = browser.find_element(By.CSS_SELECTOR, '.item')

find_elements(by=By.ID, value=None)

获取一系列子元素。

elems = browser.find_elements(By.CSS_SELECTOR, '.items')

screenshot(filename)

为元素生成快照。

elem = browser.find_element_by_id('input')
elem.screenshot('input.png')

简单案例

下面的例子演示了如何使用 Selenium 从“360图片”网站搜索和下载图片。

import os
import time
from concurrent.futures import ThreadPoolExecutor
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys

DOWNLOAD_PATH = 'images/'

def download_picture(picture_url: str):
    """
    下载保存图片
    :param picture_url: 图片的URL
    """
    filename = picture_url[picture_url.rfind('/') + 1:]
    resp = requests.get(picture_url)
    with open(os.path.join(DOWNLOAD_PATH, filename), 'wb') as file:
        file.write(resp.content)

if not os.path.exists(DOWNLOAD_PATH):
    os.makedirs(DOWNLOAD_PATH)
browser = webdriver.Chrome()
browser.get('<https://image.so.com/z?ch=beauty>')
browser.implicitly_wait(10)
kw_input = browser.find_element(By.CSS_SELECTOR, 'input[name=q]')
kw_input.send_keys('苍老师')
kw_input.send_keys(Keys.ENTER)
for _ in range(10):
    browser.execute_script(
        'document.documentElement.scrollTop = document.documentElement.scrollHeight'
    )
    time.sleep(1)
imgs = browser.find_elements(By.CSS_SELECTOR, 'div.waterfall img')
with ThreadPoolExecutor(max_workers=32) as pool:
    for img in imgs:
        pic_url = img.get_attribute('src')
        pool.submit(download_picture, pic_url)

运行上面的代码,检查指定的目录下是否下载了根据关键词搜索到的图片。

综上所述,Selenium是一款强大的自动化测试工具,可以用于Web应用程序的自动化测试、数据挖掘等领域。通过掌握Selenium的使用方法和API参考,你可以更加高效地进行自动化测试和数据挖掘等操作,提高工作效率。文章来源地址https://www.toymoban.com/news/detail-424629.html

到了这里,关于使用Selenium抓取网页动态内容的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 如何使用Python的Selenium库进行网页抓取和JSON解析

    随着互联网的快速发展,网页抓取和数据解析在许多行业中变得越来越重要。无论是电子商务、金融、社交媒体还是市场调研,都需要从网页中获取数据并进行分析。Python的Selenium库作为一种自动化测试工具,已经成为许多开发者的首选,因为它提供了强大的功能和灵活性。

    2024年02月10日
    浏览(178)
  • 爬虫:使用Selenium模拟人工操作及获取网页内容

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月13日
    浏览(34)
  • Python使用Selenium Webdriver爬取网页所有内容

    有时候,我们在用urllib或者requests库抓取页面时,得到的html源代码和浏览器中看到的不一样。这将是我们面临的一个非常常见的问题。现在网页越来越多地采用Ajax、前端模块化工具来构建,整个网页可能都是由JavaScript渲染出来的,也就是说原始的HTML代码可能就是一个空壳,

    2023年04月08日
    浏览(30)
  • 爬虫(三):使用Selenium模拟人工操作及获取网页内容

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月11日
    浏览(32)
  • Python Selenium绕过Cloudflare抓取网页

    Cloudflare和很多其他网站一样会检测访问是否为Selenium bot,其中一项为检测Selenium运行时出现的特有js变量。 这里主要包括了是否含有\\\"selenium\\\"/ \\\"webdriver\\\"的变量或者含有\\\"$cdc_\\\"/\\\"$wdc_\\\"的文件变量。 每个driver的检测机制会不一样,此处给出的方案基于chromedriver。 1. Undetected-chromedri

    2024年02月11日
    浏览(45)
  • 一个月学通Python(三十四):使用Selenium模拟人工操作及获取网页内容

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月13日
    浏览(43)
  • Python爬虫基础(三):使用Selenium动态加载网页

    Python爬虫基础(一):urllib库的使用详解 Python爬虫基础(二):使用xpath与jsonpath解析爬取的数据 Python爬虫基础(三):使用Selenium动态加载网页 Python爬虫基础(四):使用更方便的requests库 Python爬虫基础(五):使用scrapy框架 (1)Selenium是一个用于Web应用程序测试的工具。

    2024年02月06日
    浏览(42)
  • lwip-2.1.3自带的httpd网页服务器使用教程(二)使用SSI动态生成网页部分内容

    上一篇:lwip-2.1.3自带的httpd网页服务器使用教程(一)从SD卡读取网页文件并显示 (本节例程名称:ssi_test) 电脑上用的Web服务器采用ASP、PHP或JSP动态网页技术后,可以根据HTTP模板(asp、php或jsp文件),动态替换掉网页中的% %或?php ?标签,生成动态网页。lwip自带的httpd也有类

    2024年02月10日
    浏览(29)
  • Python网络爬虫逆向分析爬取动态网页、使用Selenium库爬取动态网页、​编辑将数据存储入MongoDB数据库

    目录 逆向分析爬取动态网页 了解静态网页和动态网页区别 1.判断静态网页  2.判断动态网页  逆向分析爬取动态网页 使用Selenium库爬取动态网页 安装Selenium库以及下载浏览器补丁 页面等待  页面操作 1.填充表单 2.执行JavaScript 元素选取 Selenium库的find_element的语法使用格式如下

    2024年02月15日
    浏览(77)
  • 小白用chatgpt编写python 爬虫程序代码 抓取网页数据(js动态生成网页元素)

    jS动态生成,由于呈现在网页上的内容是由JS生成而来,我们能够在浏览器上看得到,但是在HTML源码中却发现不了        如果不加,如果网站有防爬技术,比如频繁访问,后面你会发现什么数据都取不到 User-Agent获取地方:  网页获取位置: 使用代理IP解决反爬。(免费代理

    2024年02月01日
    浏览(72)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包