设为首页 加入收藏

TOP

玫瑰花变蚊子血,自动化无痕浏览器对比测试,新贵PlayWright Vs 老牌Selenium,基于Python3.10(二)
2023-07-25 21:23:25 】 浏览:97
Tags:花变蚊 新贵 PlayWright 老牌 Selenium 基于 Python3.10
原生库并不支持异步模式,必须安装三方扩展才可以。

最炫酷的是,PlayWright可以对用户的浏览器操作进行录制,并且可以转换为相应的代码,在终端执行以下命令:

python -m playwright codegen --target python -o 'edge.py' -b chromium --channel=msedge

这里通过codegen命令进行录制,指定浏览器为edge,将所有操作写入edge.py的文件中:

与此同时,PlayWright也支持移动端的浏览器模拟,比如苹果手机:

from playwright.sync_api import sync_playwright  
with sync_playwright() as p:  
    iphone_13 = p.devices['iPhone 13 Pro']  
    browser = p.webkit.launch(headless=False)  
    page = browser.new_page()  
    page.goto('https://v3u.cn')  
    page.screenshot(path='./v3u-iphone.png')  
    browser.close()

这里模拟Iphone13pro的浏览器访问情况。

当然了,除了UI功能测试,我们当然还需要PlayWright帮我们干点脏活累活,那就是爬虫:

from playwright.sync_api import sync_playwright   
   
def extract_data(entry):   
	name = entry.locator("h3").inner_text().strip("\n").strip()   
	capital = entry.locator("span.country-capital").inner_text()   
	population = entry.locator("span.country-population").inner_text()   
	area = entry.locator("span.country-area").inner_text()   
   
	return {"name": name, "capital": capital, "population": population, "area (km sq)": area}   
   
with sync_playwright() as p:   
	# launch the browser instance and define a new context   
	browser = p.chromium.launch()   
	context = browser.new_context()   
	# open a new tab and go to the website   
	page = context.new_page()   
	page.goto("https://www.scrapethissite.com/pages/simple/")   
	page.wait_for_load_state("load")   
	# get the countries   
	countries = page.locator("div.country")   
	n_countries = countries.count()   
   
	# loop through the elements and scrape the data   
	data = []   
   
	for i in range(n_countries):   
		entry = countries.nth(i)   
		sample = extract_data(entry)   
		data.append(sample)   
   
browser.close()

这里data变量就是抓取的数据内容:

[   
	{'name': 'Andorra', 'capital': 'Andorra la Vella', 'population': '84000', 'area (km sq)': '468.0'},   
	{'name': 'United Arab Emirates', 'capital': 'Abu Dhabi', 'population': '4975593', 'area (km sq)': '82880.0'},   
	{'name': 'Afghanistan', 'capital': 'Kabul', 'population': '29121286', 'area (km sq)': '647500.0'},   
	{'name': 'Antigua and Barbuda', 'capital': "St. John's", 'population': '86754', 'area (km sq)': '443.0'},   
	{'name': 'Anguilla', 'capital': 'The Valley', 'population': '13254', 'area (km sq)': '102.0'},   
	...   
]

基本上,该有的功能基本都有,更多功能请参见官方文档:https://playwright.dev/python/docs/library

Selenium

Selenium曾经是用于网络抓取和网络自动化的最流行的开源无头浏览器工具之一。在使用 Selenium 进行抓取时,我们可以自动化浏览器、与 UI 元素交互并在 Web 应用程序上模仿用户操作。Selenium 的一些核心组件包括 WebDriver、Selenium IDE 和 Selenium Grid。

关于Selenium的一些基本操作请移玉步至:python3.7爬虫:使用Selenium带Cookie登录并且模拟进行表单上传文件,这里不作过多赘述。

如同前文提到的,与Playwright相比,Selenium需要第三方库来实现异步并发执行,同时,如果需要录制动作视频,也需要使用外部的解决方案。

就像Playwright那样,让我们使用 Selenium 构建一个简单的爬虫脚本。

首先导入必要的模块并配置 Selenium 实例,并且通过设置确保无头模式处于活动状态option.headless = True:

from selenium import webdriver   
from selenium.webdriver.chrome.service import Service   
from selenium.webdriver.common.by import By   
# web driver manager: https://github.com/SergeyPirogov/webdriver_manager   
# will help us automatically download the web driver binaries   
# then we can use `Service` to manage the web driver's state.   
from webdriver_manager.chrome import ChromeDriverManager   
   
def extract_data(row):   
	name = row.find_element(B
首页 上一页 1 2 3 4 下一页 尾页 2/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇西瓜视频视频颜值区如此惊艳,看.. 下一篇Python arcpy创建栅格、批量拼接..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目