由于我还不清楚如何使用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
为什么我会收到以下警告,我该如何摆脱它们?
警告:
(节点: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)
环境:
javascript node.js headless-browser google-chrome-devtools puppeteer
我们希望在构建脚本中运行 Selenium 测试以及其他单元测试,但考虑到构建是在 Jenkins 上运行的,而 Jenkins 作为服务运行,因此测试需要无头运行。我们的 Selenium 测试是用 PHP 编写的,到目前为止我所看到的一切似乎都适用于 JavaScript 或 Python。
我们有什么方法可以无头运行 PHP Selenium 测试(最好使用与不运行无头时相同的驱动程序,以便我们可以检测特定浏览器的问题)?
php selenium headless-browser selenium-webdriver geckodriver
我已经使用 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) 我需要能够使用我的Hudson构建运行我的Ruby脚本,但不希望尝试打开浏览器窗口.我试过了:
batman:ETW cmiller$ ./createAccount.rb -b
Run Code Online (Sandbox Code Playgroud)
但这没用.
如何使用FireWatir无头运行我的Ruby脚本?
在Mac OSX上运行
尝试使用 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 或 …
我正在使用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
我需要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吗?或者我还能做什么?
有什么样document.ready()的Puppeteer?
有:
page.waitForSelector(selector)
Run Code Online (Sandbox Code Playgroud)
由于任何HTML页面上都有很多同名选择器,因此如何确保该功能已加载正确的页面?这是一个简单的函数,但是在我以前使用它时引起了很多错误page.content()。我不确定该功能缺少什么。
javascript node.js headless-browser google-chrome-devtools 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) headless-browser ×10
javascript ×5
puppeteer ×4
node.js ×3
casperjs ×2
php ×2
selenium ×2
firefox ×1
firewatir ×1
geckodriver ×1
headless ×1
java ×1
phantomjs ×1
python ×1
watir ×1
web-scraping ×1