下面是我的网络刮刀的代码,我正在尝试抓取汽车名称。我也有位置列表。我想在我的函数中使用locationlist的变量loc。
并且也使用打开的浏览器窗口,但是该功能不识别语法“页面”在第16行。
例如,像Selenium一样,您可以在代码顶部定义一次Web驱动程序,并在任何函数内外使用它,而无需再次调用它。
如何使用函数page.goto(“https://www.sixt.co.uk/")-
from playwright.sync_api import Playwright, sync_playwright, expect
locationList = [
'London Luton Airport',
'London Hilton',
'London City',
'London Wembley',
'London Battersea',
'London Shepherds Bush'
]
chromium = playwright.chromium
browser = chromium.launch(channel="chrome", headless=False)
page = browser.new_page()
page.set_viewport_size({"width": 1920, "height": 1080})
page.goto("https://www.sixt.co.uk/")
page.locator("[data-testid=\"uc-accept-all-button\"]").click()
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill("luton")
page.locator("text=London Luton Airport (GB)").click()
page.locator("button:has-text(\"Show offers\")").click()
def run(playwright: Playwright):
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill(loc)
page.locator('//div[text()="' + loc + '"]').click()
carnames = page.locator("//h2[@class='vehicle-item__title']")
#Get all carnames in a list
carnamelist = [cars.text for cars in carnames]
for loc in locationList:
with sync_playwright() as playwright:
run(playwright)
以下是如何在没有上下文管理器的情况下全局初始化剧作家浏览器。
在您的特定代码中,这将如下所示:
from playwright.sync_api import Playwright, sync_playwright
locationList = [
'London Luton Airport',
'London Hilton',
'London City',
'London Wembley',
'London Battersea',
'London Shepherds Bush'
]
playwright = sync_playwright().start() # <-- Use this to initialize playwright globally
chromium = playwright.chromium
browser = chromium.launch(channel="chrome", headless=False)
page = browser.new_page()
page.set_viewport_size({"width": 1920, "height": 1080})
page.goto("https://www.sixt.co.uk/")
page.locator("[data-testid=\"uc-accept-all-button\"]").click()
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill("luton")
page.locator("text=London Luton Airport (GB)").click()
page.locator("button:has-text(\"Show offers\")").click()
def run(playwright: Playwright):
page.locator("[placeholder=\"Find a location\"]").click()
page.locator("[placeholder=\"Find a location\"]").fill(loc)
page.locator('//div[text()="' + loc + '"]').click()
carnames = page.locator("//h2[@class='vehicle-item__title']")
#Get all carnames in a list
carnamelist = [cars.text for cars in carnames]
for loc in locationList:
run(playwright)
playwright.stop() # --> Cleanup resources properly when done
但是,您也可以从在原始问题中创建的上下文管理器中初始化页面
和浏览器
,它将按预期工作。
我尝试过剧作家页面对象文档和几个youtube视频关于这个主题。我也读过GitHub问题(github页面对象问题),但当有不止一个页面对象类时,仍然存在实现页面对象模型的问题。我理解一个简单的类和测试文件,但是如果有人能帮助我,当我想在另一个页面类中实例化一个页面类或者继承它时,那将是非常感激的。我想在特定方法之外的另一个类中实例化一个页面类,这样我就可以在多个方法中使用该实例。我希望有一个样板
是否可以定义一个禁用Javascript的浏览器来模拟爬虫如何查看页面?应该有一个选项可以通过。
问题内容: 想知道是否可以用一个小的PHP包装程序从浏览器中执行,因为我无权访问服务器的外壳程序。 不确定是否可以使用cURL做到这一点? 问题答案: 是的,您可以使用一个小的PHP包装器来运行Composer。Phar文件中提供了所有Composer源代码,因此可以提取该源代码,然后在设置InputInterface替换Composer后运行它,并期望通过命令行传递命令。 如果您这样设置目录结构
问题内容: 我无权访问服务器,我需要使用ISO-8859-1字符集进行整个AJAX事务。我正在使用jQuery.load()函数以及以下jQuery方法: 即使firefox和chrome返回正确编码的结果,IE(所有版本)却没有。有什么方法只能在客户端进行修复吗? ps所有内容均已在ISO-8859-1中正确编码。 问题答案: 我只是遇到了类似的问题,但问题基本上是IE(任何版本)不支持“ ov
问题内容: 我想从网站上获取一些数据。通常,我使用这些东西,但是现在该站点使用JS来提供数据。las,不支持。 我该怎么用呢? 问题答案: 以下是一些选项: 硒(教程) 对于无头自动化,可以将Selenium与PhantomJS结合使用 WebKit 蜘蛛猴
问题内容: 我看到很多执行“松散”私有变量/功能的python代码。他们将用一个下划线(例如_foo)声明函数/变量,然后仅在类/文件中使用它。他们不使用双下划线确实让我感到烦恼,因为最终,有人会从班级外部将此人称为“私人”成员。 是否有某种方法可以在单个下划线上强制执行隐私(不更改为双下划线)?谢谢! 问题答案: 否。这就是python的理念:不要让编译器/解析器强制执行隐私,因为 想要 访问私
问题内容: 问题: 在我们的一项测试中,我们具有“长按”/“单击并按住”功能,可以使用以下方法解决: 我们希望通过包含动作链的一部分来理想地解决这一问题: 显然,这是行不通的,因为没有“睡眠”操作。 另一个实际的例子可能是“类人打字”。例如: 注意,这些只是示例,这个问题是通用的。 问题: 是否可以扩展动作序列并引入自定义动作? 问题答案: 是的,您可以扩展操作框架。 但是,严格来说,得到的是:
本文向大家介绍javascript实现的元素拖动函数宿主为浏览器,包括了javascript实现的元素拖动函数宿主为浏览器的使用技巧和注意事项,需要的朋友参考一下