标签: headless-browser

使用ChromeDriver和无头模式下载Java,Selenium中的文件

由于我还不清楚如何使用ChromeDriver中的--headless模式下载文件 - selenium [Java],请在此处添加如何执行此操作的示例,我尝试这样做(文件下载工作正常,没有 - 无头选项):

ChromeOptions lChromeOptions = new ChromeOptions();
HashMap<String, Object> lChromePrefs = new HashMap<String, Object>();
lChromePrefs.put("profile.default_content_settings.popups", 0);
lChromePrefs.put("download.default_directory", _PATH_TO_DOWNLOAD_DIR);
lChromePrefs.put("browser.set_download_behavior", "{ behavior: 'allow' , downloadPath: '"+_PATH_TO_DOWNLOAD_DIR+"'}");

lChromeOptions.addArguments("--headless");
lChromeOptions.addArguments("--disable-gpu");
lChromeOptions.setExperimentalOption("prefs", lChromePrefs);
WebDriver lWebDriver = new ChromeDriver(lChromeOptions);
Run Code Online (Sandbox Code Playgroud)

据我所知,自从Chrome v60 +设置以来Browser.setDownloadBehaviour(true, _DIRECTORY)我无法以无头模式下载文件但我无法找到ChromeDriver是否已经支持它的信息,或者只是我使用错误的chrome首选项作为参数

ChromeDriver版本:2.34 Selenium + WebDriver版本:3.8.1

java selenium google-chrome headless-browser selenium-chromedriver

3
推荐指数
1
解决办法
3712
查看次数

运行 Puppeteer 时出现 UnhandledPromiseRejectionWarning?

为什么我会收到以下警告,我该如何摆脱它们?

警告:

(节点:26771)UnhandledPromiseRejectionWarning:未处理的承诺拒绝(拒绝ID:1):错误:协议错误(Runtime.callFunctionOn):目标关闭。

(节点:26771)[DEP0018] 弃用警告:不推荐使用未处理的承诺拒绝。将来,未处理的承诺拒绝将使用非零退出代码终止 Node.js 进程。

代码:

const puppeteer = require("puppeteer");

(async () => {
    const browser = await puppeteer.launch();
    const page = await browser.newPage();
    await page.goto("https://dn.se", { waitUntil: "domcontentloaded" });
    var output = page.evaluate(() => {
        return;
    });
    await browser.close();
})();
Run Code Online (Sandbox Code Playgroud)

环境:

  • macOS 高山脉
  • 节点 v8.5.0
  • 傀儡师:1.9.0

javascript node.js headless-browser google-chrome-devtools puppeteer

3
推荐指数
1
解决办法
4907
查看次数

如何在 PHP 中运行 Selenium headless?

我们希望在构建脚本中运行 Selenium 测试以及其他单元测试,但考虑到构建是在 Jenkins 上运行的,而 Jenkins 作为服务运行,因此测试需要无头运行。我们的 Selenium 测试是用 PHP 编写的,到目前为止我所看到的一切似乎都适用于 JavaScript 或 Python。

我们有什么方法可以无头运行 PHP Selenium 测试(最好使用与不运行无头时相同的驱动程序,以便我们可以检测特定浏览器的问题)?

php selenium headless-browser selenium-webdriver geckodriver

3
推荐指数
1
解决办法
3458
查看次数

PHP chrome-php / headless-chromium-php 错误

我已经使用 chrome-php 和 headless-chromium 库几个月了,没有任何问题,但现在我收到了这个错误。有谁知道为什么会开始发生这种情况?谢谢。

Fatal error: Uncaught Wrench\Exception\HandshakeException: No 
accept header receieved on handshake response in         
C:\Users\kamurj\vendor\chrome-php\wrench\src\Protocol\Protocol.php:469 
Stack trace: #0 C:\Users\kamurj\vendor\chrome- php\wrench\src\Client.php(243): Wrench\Protocol\Protocol- >validateResponseHandshake('HTTP/1.1 403 Fo...', 'oMHZ8u72RCw63G9...')                 
 #1 C:\Users\kamurj\vendor\chrome- php\chrome\src\Communication\Socket\Wrench.php(99): Wrench\Client- >connect() #2 C:\Users\kamurj\vendor\chrome- php\chrome\src\Communication\Connection.php(186): HeadlessChromium\Communication\Socket\Wrench->connect() #3 C:\Users\kamurj\vendor\chrome-php\chrome\src\Browser\BrowserProcess.php(146): HeadlessChromium\Communication\Connection->connect() #4 C:\Users\kamurj\vendor\chrome-php\chrome\src\BrowserFactory.php(81): HeadlessChromium\Browser\BrowserProcess->start('C:\\Program File...', Array) #5 C:\xampp\htdocs\zmeta.php(266): HeadlessChromium\BrowserFactory->createBrowser(Array) #6 {main} thrown in C:\Users\kamurj\vendor\chrome-php\wrench\src\Protocol\Protocol.php on line 469
Run Code Online (Sandbox Code Playgroud)

php headless-browser google-chrome-headless

3
推荐指数
1
解决办法
2000
查看次数

如何使用我的Ruby脚本运行Firefox浏览器?

我需要能够使用我的Hudson构建运行我的Ruby脚本,但不希望尝试打开浏览器窗口.我试过了:

batman:ETW cmiller$ ./createAccount.rb -b
Run Code Online (Sandbox Code Playgroud)

但这没用.

如何使用FireWatir无头运行我的Ruby脚本?

在Mac OSX上运行

firefox watir firewatir headless-browser watir-webdriver

2
推荐指数
1
解决办法
5986
查看次数

CasperJS 无法设置 window.navigator 对象

尝试使用 CasperJS 抓取网页。网页会检查浏览器是否为 IE 6/7。

使用 casperjs 传递 userAgent 似乎不满足其条件。UserAgent 通过:Mozilla/4.0(兼容;MSIE 6.0;Windows NT 5.1) 以下是页面进行的检查以确定浏览器

agt = navigator.userAgent.toLowerCase();
browserType = navigator.appName;

if( ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 6.") != -1))
    ||  ((browserType.indexOf("xplorer") != -1) 
    && (agt.indexOf("msie 7.") != -1)) )
{

}
else
{
    alert("This "+ browserType + " Version is not supported by this application. Please use Internet Explorer  6.x or Internet Explorer 7.x.");
    window.close();
}
Run Code Online (Sandbox Code Playgroud)

以下是来自 casperjs 的调试信息。

[info] [remote] [alert] 此应用程序不支持此 Netscape 版本。请使用 Internet Explorer 6.x 或 …

javascript headless-browser phantomjs casperjs

2
推荐指数
1
解决办法
795
查看次数

如何判断页面已完成加载?

我正在使用Chromium的无头Web浏览器API。基于chrome_remote_shell源代码,我提出了以下代码:

#!/usr/bin/env python

import json
import requests
import pprint
import websocket

tablist = json.loads(requests.get("http://%s:%s/json" % ("localhost", 9222)).text)
print(tablist)
wsurl = tablist[0]['webSocketDebuggerUrl']
conn = websocket.create_connection(wsurl)
navcom = json.dumps({"id":0, "method":"Network.enable"})
conn.send(navcom)
navcom = json.dumps({"id":1, "method":"Page.navigate", "params":{"url":"https://news.ycombinator.com/"}})
conn.send(navcom)

while True:
    packet = json.loads(conn.recv())
    if 'method' in packet:
        print(packet['method'])
    else:
        print(packet)
Run Code Online (Sandbox Code Playgroud)

这是示例输出:

[{u'description': u'', u'title': u'Hacker News', u'url': u'https://news.ycombinator.com/', u'webSocketDebuggerUrl': u'ws://localhost:9222/devtools/page/7d03a57d-77a9-4ceb-b645-3b85461de5be', u'type': u'page', u'id': u'7d03a57d-77a9-4ceb-b645-3b85461de5be', u'devtoolsFrontendUrl': u'/devtools/inspector.html?ws=localhost:9222/devtools/page/7d03a57d-77a9-4ceb-b645-3b85461de5be'}]
{u'id': 0, u'result': {}}
Network.requestWillBeSent
{u'id': 1, u'result': {u'frameId': u'21045.1'}}
Network.responseReceived
Network.dataReceived
Network.dataReceived
Network.loadingFinished
Network.requestWillBeSent
Network.requestWillBeSent
Network.requestServedFromCache …
Run Code Online (Sandbox Code Playgroud)

python google-chrome headless headless-browser google-chrome-devtools

2
推荐指数
1
解决办法
821
查看次数

如何暂停并等待Puppeteer的用户输入?

我需要Puppeteer暂停并等待和的用户输入,username然后password才能继续。这是一个nodejs8.12.0应用程序。

(async () => {
    const browser = await puppeteer.launch({headless: false});
    const page = await browser.newPage();   
    await page.goto('https://www.myweb.com/login/');

    //code to wait for user to enter username and password, and click `login`

    const first_page = await page.content();

   //do something 

    await browser.close();
)}();
Run Code Online (Sandbox Code Playgroud)

基本上,程序会暂停并等待,直到用户单击login按钮。有可能这样做Puppeteer吗?或者我还能做什么?

javascript node.js headless-browser casperjs puppeteer

2
推荐指数
1
解决办法
1857
查看次数

功能类似于Puppeteer中的document.ready()吗?

有什么样document.ready()Puppeteer

有:

page.waitForSelector(selector)
Run Code Online (Sandbox Code Playgroud)

由于任何HTML页面上都有很多同名选择器,因此如何确保该功能已加载正确的页面?这是一个简单的函数,但是在我以前使用它时引起了很多错误page.content()。我不确定该功能缺少什么。

javascript node.js headless-browser google-chrome-devtools puppeteer

2
推荐指数
1
解决办法
1884
查看次数

当 Headless TRUE 时,Puppeteer 无法找到元素

我在 Puppeteer 方面遇到了一些问题,我想提取一个项目列表,并在 headless 为 FALSE 时成功,但在为 TRUE 时则不然。

首先,我想在映射之前获取这些元素。

这是我的脚本,也许你可以复制它,它非常基本。


const chalk = require("chalk");

const baseUrl = "https://www.interencheres.com/recherche/lots?search=";

const searchTerm = "Apple";

const searchUrl = baseUrl + searchTerm;

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    ignoreHTTPSErrors: true,
    args: [`--window-size=1920,1080`],
    defaultViewport: {
      width: 1920,
      height: 1080,
    },
  });

  const page = await browser.newPage();

  // Begin navigation
  console.log(chalk.yellow("Beginning navigation."));
  await page.goto(searchUrl);

  // Await List of elements;
  console.log(chalk.yellow("Wait for Network Idle..."));
  await page.waitForNetworkIdle();

  // get Items
  const findElements …
Run Code Online (Sandbox Code Playgroud)

javascript web-scraping headless-browser puppeteer

2
推荐指数
1
解决办法
5987
查看次数