【问题标题】:Alternatives to Selenium Webdriver [closed]Selenium Webdriver 的替代品 [关闭]
【发布时间】:2015-06-22 15:26:54
【问题描述】:

我使用 C# 和 Python 的 Selenium Webdriver 从网站获取数据元素,但是网页抓取的速度非常慢。抓取 35000 个数据表花了我大约 1.5 天。使用 Selenium Webdriver,我可以执行 Javascript 来获取 Java 元素。是否有一些可用的库不需要像 Webdriver 这样的东西来在网页上执行 Javascript 来检索元素并且也能够点击元素?还是有比 Selenium 更快的替代品?

【问题讨论】:

  • 你试过phantomjs吗?看到这个问题 - stackoverflow.com/questions/8049520/…
  • 是的,我已经尝试过用于 Selenium 的 PhantomJS,它比用于 Selenium 的 Chromedriver 更快。我还发现我可以通过提取 或 标签之间的文本来直接获取表格,而不是从每个表格元素中单独提取它: driver.find_element_by_tag_name("td") -> driver.find_element_by_tag_name( “tbody”)。

标签: javascript selenium webdriver


【解决方案1】:

我建议你使用TestCafe

TestCafe 是用于 Web 功能测试(e2e 测试)的免费开源框架。 TestCafe 基于 Node.js,完全不使用 WebDriver。

TestCafe 驱动的测试在服务器端执行。为了获取 DOM 元素,TestCafe 提供了强大而灵活的 Selector 系统。 TestCafe 可以使用 ClientFunction 功能在测试网页上执行 JavaScript(请参阅我们的文档)。

TestCafe 测试真的非常快,see for yourself。但由于内置智能等待系统,高速试运行不影响稳定性。

TestCafe 的安装非常简单:

1) 检查您的 PC 上是否有 Node.js(或安装它)。

2) 安装 TestCafe 打开 cmd 并输入:

npm install -g testcafe

写作测试不是一门火箭科学。这是一个快速入门: 1) 将以下代码复制粘贴到您的文本编辑器并保存为“test.js”

import { Selector } from 'testcafe';

fixture `Getting Started`
    .page `http://devexpress.github.io/testcafe/example`;

test('My first test', async t => {
    await t
        .typeText('#developer-name', 'John Smith')
        .click('#submit-button')
        .expect(Selector('#article-header').innerText).eql('Thank you, John Smith!');
});

2) 通过在 cmd 中输入以下命令在浏览器(例如 chrome)中运行测试:

testcafe chrome test.js

3) 在控制台输出中获取描述性结果。

TestCafe 允许您针对各种浏览器进行测试:本地、远程(在设备上,无论是用于 Raspberry Pi 的浏览器还是用于 iOS 的 Safari)、云(例如 Sauce Labs)或无头(例如 Nightmare)。这意味着您可以轻松地将 TestCafe 与您的持续集成基础架构一起使用。

【讨论】:

  • 我很高兴知道人们是否隶属于他们推荐的框架@HelenDikareva
【解决方案2】:

我建议 Selenium + PhantomJSDriver (Ghostdriver),它用于 GUI-less 浏览器自动化。有了这个,您可以轻松地浏览页面、选择元素(您可以选择航班)、提交表单并执行一些抓取。 还支持Javascript。

您可以通过 Selenium 文档here 获取。您必须下载phantomjs.exe 文件。

here 中给出了一个很好的 PhantomJSDriver 教程

PhantomJSDriver 的配置(来自教程):

DesiredCapabilities caps = new DesiredCapabilities();
caps.setJavascriptEnabled(true); // not really needed: JS enabled by default
caps.setCapability(PhantomJSDriverService.PHANTOMJS_EXECUTABLE_PATH_PROPERTY, "C://phantomjs.exe");
caps.setCapability("takesScreenshot", true);
WebDriver driver = new PhantomJSDriver(caps);   

其他选项(这不需要 WebDriver):PhantomJS

PhantomJS 是一个可使用 JavaScript API 编写脚本的无头 WebKit。它具有对各种 Web 标准的快速原生支持:DOM 处理、CSS 选择器、JSON、Canvas 和 SVG。

这是无 GUI 的,还可以截屏。

示例(来自here):

var page = require('webpage').create();
page.open('http://example.com', function(status) {
  console.log("Status: " + status);
  if(status === "success") {
    page.render('example.png');
  }
  phantom.exit();
});

PS:我建议 JSoup 用于网络抓取,但它不支持 Javascript。 PhantomJSDriver 有一个叫做 Ghost.py for python 的东西。

【讨论】:

  • 感谢您的评论。我已经尝试过 Chromedriver 以及无头 PhantomJSDriver。两者都不是很快找到元素。 Ghost.py 看起来很有趣,我会阅读更多关于它的内容。此外,我还发现了一个名为 Scrapy 的 python webscraper。我会尝试看看它是否工作得更快。
  • 是的,你可以试试scrapy。我相信还有一种叫做beautifulsoup的东西。我建议您将问题标题编辑为特定内容,因为人们认为这是一个基于意见的问题。
【解决方案3】:

LeanFT 怎么样?这是一款新的惠普产品,可与 C# 和 Java 一起使用,用户说他们切换到 LeanFT “因为Selenium couldn’t handle 所有 [他们的] 应用程序。”

【讨论】:

  • 看起来很有趣!
【解决方案4】:

如果您使用 HTMLUnit 网络驱动程序,则没有运行浏览器的开销,因此代码可以运行得更快。您可以通过完全放弃框架/工具集并直接查询页面并根据需要解析它们来加快速度。但是,这会使维护和更新变得很痛苦。

【讨论】:

    猜你喜欢
    • 2022-10-15
    • 2012-06-16
    • 2011-06-16
    • 2011-12-17
    • 2010-10-21
    • 2010-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多