浏览器模拟爬虫
浏览器模拟爬虫
一. selenium库介绍
Selenium 通过使用 WebDriver 支持市场上所有主流浏览器的自动化。 WebDriver 是一个 API 和协议,它定义了一个语言中立的接口,用于控制 web 浏览器的行为。 每个浏览器都有一个特定的 WebDriver 实现,称为驱动程序。 驱动程序是负责委派给浏览器的组件,并处理与 Selenium 和浏览器之间的通信。
这种分离是有意识地努力让浏览器供应商为其浏览器的实现负责的一部分。 Selenium 在可能的情况下使用这些第三方驱动程序, 但是在这些驱动程序不存在的情况下,它也提供了由项目自己维护的驱动程序。
Selenium 框架通过一个面向用户的界面将所有这些部分连接在一起, 该界面允许透明地使用不同的浏览器后端, 从而实现跨浏览器和跨平台自动化。
Selenium的设置与其他商业工具有很大不同. 在开始编写 Selenium 代码之前, 您必须安装所选语言的相关类库, 目标浏览器的驱动程序.
二. 环境配置
-
下载webdriver
我是使用firefox浏览器,所以下载的也是firefox的驱动程序,链接如下:
https://github.com/mozilla/geckodriver/releases -
驱动位置
驱动所存放的应该是在python的Scripts文件夹当中
三. 具体实现
需要注意以下几点:
- 导入的函数要与浏览器相适配,用的是什么浏览器就应该用什么函数
- 如果不想弹出浏览器可以配置无头模式,这样就可以不显示浏览器界面
- selenium库实现的爬虫加载速度较慢,尤其是在页面载量较大的情况下,速度有时候让人崩溃,可以采取设置隐式等待时间的方法来配置等待时间
- 事件查找,selenium当中配置了很多的事件查找方式,包括定位元素位置,模拟点击,模拟鼠标操作,模拟键盘操作,xpath方式等等,根据需要选择自己喜欢的方式即可。
示例代码如下:
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from selenium.webdriver.common.by import By
from selenium.common.exceptions import NoSuchElementException
import threading
import time
# 配置无头Firefox的选项
options = Options()
options.add_argument("--headless")
# 创建Firefox浏览器的驱动实例,并设置无头模式
driver = webdriver.Firefox(options=options)
# 设置隐式等待时间为一个较小的值,例如0.1秒
driver.implicitly_wait(0.1)
# 定义一个函数来执行driver.get(),并在执行后等待2秒
def load_page(id):
url = ‘’
print(url)
driver.get(url)
time.sleep(2) # 等待2秒
icao = input("请输入参数:")
# 创建一个线程来执行load_page函数
t = threading.Thread(target=load_page,args=(icao,))
t.start()
# 主线程等待2秒后继续执行,而不必等待页面加载完成
time.sleep(2)
print("已尝试加载页面2秒,不等待页面完全加载,继续执行后续操作...")
# 注意:由于线程是并行执行的,此时load_page函数可能仍在执行中
# 后续的代码需要考虑到这一点,避免与页面加载的线程产生冲突
# 尝试查找并点击按钮(此操作可能会因为页面未完全加载而失败)
try:
button = driver.find_element(By.ID, "对应事件ID")
button.click()
except NoSuchElementException:
print("按钮未找到,请检查页面是否已完全加载或元素ID是否正确。")
# 后续操作...
# 例如,你可以在这里尝试执行页面元素抓取、数据提取等操作(需要注意页面可能未完全加载)
# 关闭浏览器(需要确保所有相关的线程都已完成)
t.join() # 等待load_page线程完成
driver.quit()
四. 参考文章