GVKun编程网logo

查找Selenium WebDriver启动的浏览器进程的PID(selenium获取已经打开的浏览器对象)

6

针对查找SeleniumWebDriver启动的浏览器进程的PID和selenium获取已经打开的浏览器对象这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展JavaSeleniumWebdr

针对查找Selenium WebDriver启动的浏览器进程的PIDselenium获取已经打开的浏览器对象这两个问题,本篇文章进行了详细的解答,同时本文还将给你拓展JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、Selenium Chrome浏览器org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时、Selenium WebDriver API 学习笔记(三):浏览器控制、Selenium WebDriver API 学习笔记(二):浏览器控制等相关知识,希望可以帮助到你。

本文目录一览:

查找Selenium WebDriver启动的浏览器进程的PID(selenium获取已经打开的浏览器对象)

查找Selenium WebDriver启动的浏览器进程的PID(selenium获取已经打开的浏览器对象)

在C#中,我启动了一个浏览器进行测试,我想获取PID,以便在Winforms应用程序中可以杀死启动的所有剩余Ghost进程。

driver = new FirefoxDriver();

如何获取PID?

答案1

小编典典

看起来更像是C#问题,而不是特定于Selenium。

这是一个非常古老的不确定性答案,如果您想尝试此方法,请重新考虑。

我的逻辑是,firefox使用Process.GetProcessesByName方法获取具有名称的所有进程PID
,然后启动FirefoxDriver,然后再次获取进程的PID,比较它们以获取刚刚启动的PID。在这种情况下,特定驱动程序已启动多少个进程无关紧要(例如,Chrome启动多个进程,Firefox仅启动一个进程)。

using System.Collections.Generic;using System.Diagnostics;using System.Linq;using Microsoft.VisualStudio.TestTools.UnitTesting;using OpenQA.Selenium.Firefox;namespace TestProcess {    [TestClass]    public class UnitTest1 {        [TestMethod]        public void TestMethod1() {            IEnumerable<int> pidsBefore = Process.GetProcessesByName("firefox").Select(p => p.Id);            FirefoxDriver driver = new FirefoxDriver();            IEnumerable<int> pidsAfter = Process.GetProcessesByName("firefox").Select(p => p.Id);            IEnumerable<int> newFirefoxPids = pidsAfter.Except(pidsBefore);            // do some stuff with PID if you want to kill them, do the following            foreach (int pid in newFirefoxPids) {                Process.GetProcessById(pid).Kill();            }        }    }}

JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测

JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测

我正在尝试使用selenium和铬在网站中自动化一个非常基本的任务,但是以某种方式网站会检测到铬是由selenium驱动的,并阻止每个请求。我怀疑该网站是否依赖像这样的公开DOM变量https://stackoverflow.com/a/41904453/648236来检测selenium驱动的浏览器。

我的问题是,有没有办法使navigator.webdriver标志为假?我愿意尝试修改后重新尝试编译selenium源,但是似乎无法在存储库中的任何地方找到NavigatorAutomationInformation源https://github.com/SeleniumHQ/selenium

任何帮助深表感谢

PS:我还从https://w3c.github.io/webdriver/#interface尝试了以下操作

Object.defineProperty(navigator, ''webdriver'', {    get: () => false,  });

但是它仅在初始页面加载后更新属性。我认为网站会在执行脚本之前检测到变量。

答案1

小编典典

从当前的实现开始,一种理想的访问网页而不被检测到的方法是使用ChromeOptions()该类向以下参数添加几个参数:

排除enable-automation开关的集合
关掉 useAutomationExtension
通过以下实例ChromeOptions

Java示例:

System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");ChromeOptions options = new ChromeOptions();options.setExperimentalOption("excludeSwitches", Collections.singletonList("enable-automation"));options.setExperimentalOption("useAutomationExtension", false);WebDriver driver =  new ChromeDriver(options);driver.get("https://www.google.com/");

Python范例

from selenium import webdriveroptions = webdriver.ChromeOptions()options.add_experimental_option("excludeSwitches", ["enable-automation"])options.add_experimental_option(''useAutomationExtension'', False)driver = webdriver.Chrome(options=options, executable_path=r''C:\path\to\chromedriver.exe'')driver.get("https://www.google.com/")

Selenium Chrome浏览器org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时

Selenium Chrome浏览器org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时

如何解决Selenium Chrome浏览器org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时?

调试步骤 可能是以下两个问题之一。

1.由于某些原因,Chrome驱动程序无法启动:

手动在终端中运行Chrome驱动程序

C:\ Users \ Jim> C:\Users\Jim\Downloads\chromedriver_win32\chromedriver.exe

现在,我们必须获得以下消息,指示服务器已成功启动。

如果未收到上述消息并且服务器未启动,请检查您所得到的错误并进行相应的响应?可能下载了损坏的二进制文件,然后再次下载。

2.无法使用主机名访问chrome驱动程序localhost

如果您能够按照上述步骤成功启动chromedriver,现在尝试使用相应的端口访问以下网址。http://localhost:{port}/status

例如,在上述消息中,服务器从端口9515启动。访问 浏览器中的网址,http://localhost:9515/status

您应该获得以上消息,指示服务器可以通过主机名访问 localhost

如果您无法访问,请 使用管理员权限在编辑器中打开C:\ Windows \ System32 \ drivers \ etc \ hosts 并检查localhostDNS是否已映射到 127.0.0.1

解决方法

public class Dem {
public static void main(String[] args) throws InterruptedException {
WebDriver driver;
String url = "https://www.google.com”;
System.setProperty(“webdriver.chrome.driver”,”C:\Users\Jim\Downloads\chromedriver_win32\chromedriver.exe”);
driver = new ChromeDriver();
driver.get(url);
driver.close();
}
}

Selenium Webdriver和Chrome驱动程序是最新版本

Selenium Webdriver:3.14.0

chromedriver:2.42

java:1.8.0_181

这是运行代码后的错误。Google chrome根本不会启动

严重:org.apache.commons.exec.ExecuteException:进程退出,
错误:-1073741792(退出值:-1073741792)线程“ main”中的异常
org.openqa.selenium.WebDriverException:等待驱动程序服务器
启动时超时。内部版本信息:版本:‘3.14.0’,版本:’aacccce0’,时间:
‘2018-08-02T20:13:22.693Z’驱动程序信息:driver.version:位于
org.openqa.selenium.remote.service的ChromeDriver 。 DriverService.waitUntilAvailable(DriverService.java:193)

org.openqa.selenium.remote.service.DriverService.start(DriverService.java:179)

org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java: 79)

org.openqa.selenium.remote.RemoteWebDriver()
上的
org.openqa.selenium.remote.RemoteWebDriver.startSession(RemoteWebDriver.java:212)
上的org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:548) .java:130)(位于
org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:181),位于
org.openqa.selenium.chrome.ChromeDriver。(ChromeDriver.java:168)
。 ChromeDriver。(ChromeDriver.java:123)位于
news.Dem.main(Dem.java:17),由以下原因引起:
org.openqa.selenium.net .UrlChecker $ TimeoutException:等待
[ http:// localhost:32986 /状态]将于20002 ms后在org.openqa.selenium.net上可用
.UrlChecker.waitUntilAvailable(UrlChecker.java:100)

org.openqa.selenium.remote.service.DriverService.waitUntilAvailable(DriverService.java:188)
...... 9点多

Selenium WebDriver API 学习笔记(三):浏览器控制

Selenium WebDriver API 学习笔记(三):浏览器控制

读了虫师《Selenium 2 自动化测试实战 基于 Python 语言》一书,感触颇深,内容非常丰富。现整理下来,供后续学习参考使用。本次主要整理的是元素浏览器控制之二。内容在 “Selenium WebDriver API 学习笔记(二):浏览器控制” 基础上添加。

9. 设置元素等待

①显式等待:WebDriverWait(driver,poll_fequency=0.5,ignored_exceptions=None)
②隐式等待:driver.implicitly_wait(time) time可自定义
③sleep休眠:sleep(time)  time可自定义

10. 定位一组元素

在之前定位单个元素的element后加s
find_elements_by_id();      		
find_elements_by_name();   		
find_elements_by_class_name();  	
find_elements_by_tag_name();     	
find_elements_by_link_text();     	
find_elements_by_partial_link_text();  	
find_elements_by_xpath();  
find_elements_by_css_selector();	

11. 多表单切换

driver.swtich_to.frame()

12. 多窗口切换

driver.switch_to.widow()  用于切换到相应的窗口
current_window_handle  获取当前窗口句柄
window_handles   返回所有窗口的句柄到当前会话

13. 警告框处理

text:返回 alert/confirm/prompt中的文字信息
accept(): 接受现有警告框
dismiss(): 解散现有警告框
send_keys(keysToSend): 发送文本至警告框

14. 上传文件 普通上传:将本地文件的路径作为一个值放在 input 标签中,通过 form 表单将这个值提交给服务器 插件上传:指基于 Flash,JavaScript 或 Ajax 等技术实现上传功能

①send_keys()
如:
from selenium import webdriver
import os

driver = webdriver.Chrome()
file_path=''file:///'' + os.path.abspath(''upfile.html'')
driver.get(file_path)
#定位上传按钮,添加本地文件
driver.find_element_by_name("file").send_keys(''D:\\upload_file.txt'')
driver.quit()
②AutoIt实现上传  下载使用http://www.autoitscript.com/site/

15. 下载文件

from selenium import webdriver
import os
fp=webdriver.Firefoxprofile()
fp.set_preference("browser.download.folderList",2)#0是默认路径,2是指定路径
fp.set_preference("browser.download.manager.showWhenStarting",False)#是否显示开始
fp.set_preference("browser.download.dir",os.getcwd())#用于指定所下载的文件的目录
fp.set_preference("browser.helperApps.neverAsk.saveToDisk","application/octet-stream")#下载文件的类型
driver=webdriver.Firefox(firefox_profile=fp)
driver.get("http://pypi.Python.org/pypi/selenium")
driver.find_element_by_partial_link_text("selenium-2").click()

16. 操作 Cookie

WebDriver操作cookie的方法:
get_cookies(): 获取所有的cookie信息
get_cookie(name): 返回字典的key为“name”的cookie信息
add_cookie(cookie_dict):添加cookiecookie_dict为字典对象,必须有namevaluedelete_cookie(name,optionsString):删除cookie信息
delete_all_cookies():删除所有的cookie信息

17. 调用 JavaScipt

调整浏览器滚动条位置
window.scrollTo(左边距,上边距)

18. 处理 HTML5 的视频播放

load(),play(), pause()   加载,播放,暂停

19. 窗口截图

driver.get_screenshot_as_file("D:\\xxxxx")#截取当前窗口,并指定截图图片的保存位置

20. 关闭窗口

quit():退出相关程序和关闭所有窗口;
close():关闭当前窗口

21. 验证码的处理

①去掉验证码
②设置万能验证码
③验证码识别技术
④记录cookie

Selenium WebDriver API 学习笔记(二):浏览器控制

Selenium WebDriver API 学习笔记(二):浏览器控制

读了虫师《Selenium 2自动化测试实战 基于Python语言》一书,感触颇深,内容非常丰富。现整理下来,供后续学习参考使用。本次主要整理的是浏览器控制操作之一。 1.控制浏览器窗口大小

set_window_size(); 
如set_window_size(640,480); 即宽640,高480

maximize_window(); 窗口最大化,不需要参数,直接使用

2.控制浏览器进退、前进

back(); 返回
forwar(); 前进
如 driver.back(); 其中driver=webdriver.Chrome()

3.模拟浏览器刷新

refresh(); 如driver.refresh()类似F5

4.简单元素操作

①clear(); 清除文本
②send_keys(*value); 模拟按键输入
③click(); 单击元素
举例:
driver.find_element_by_id("qwe").clear()
driver.find_element_by_id("qwe").send_keys("tyyu")
driver.find_element_by_id("login").click()

5.webelement接口常用方法

size:返回元素的尺寸
text:获取元素的文本
get_attributte(name):获得属性
is_displayed():设置改元素是否用户可见

举例:
size=driver.find_element_by_id("qwe").size    获取输入框的尺寸
text=driver.find_element_by_id("qwe").text    获取文本信息
attributte = driver.find_element_by_id("qwe").get_ attributte(''type'')  可以是id、name、type或其他任意属性
result= driver.find_element_by_id("qwe"). is_displayed()  返回元素的结果是否可见,返回结果为Ture或者False

6.鼠标事件

perform(): 执行所有ActionChains中存储的行为
context_click(): 右击
double_click(): 双击
drag_and_drop(element, target
move_to_element(): 鼠标悬停

举例:
①rom selenium.webdriver.common.action_chains import ActionChains   先引入ActionChains类
driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
#...
#定位到要右击的元素
right_click = driver.find_element_by_id("qwe")
#对定位到的元素执行鼠标右击操作
ActionChains(driver).context_click(right_click).perform()
说明:
ActionChains(driver):调用这个类,将浏览器驱动driver作为参数传入
context_click(right_click):模拟邮件操作,在使用时需要指定元素定位
perfom():将指定所有ActionChains中存储的行为。
②above=driver.find_element_by_id("qwer")
ActionChains(driver).move_to_element(above).perfom()
其他方法类似

7.键盘事件

Keys类提供了键盘上所有的按键方法
from selenium.webdriver.common.keys import Keys
send_keys(Keys.BACK_SPACE)        删除键
send_keys(Keys. SPACE)				空格键
send_keys(Keys.TAB)				制表键
send_keys(Keys.ESCAPE)				回退键
send_keys(Keys.ENTER)				回车键
send_keys(Keys.CONTROL,''a'')			全选
send_keys(Keys.CONTROL,''c'')		复制
send_keys(Keys.CONTROL,''x'')			剪贴
send_keys(Keys.CONTROL,''v'')			粘贴
send_keys(Keys.F1)
...
send_keys(Keys.F12)				F1-F12

8.获得验证信息

title, URL, text
举例:
now_url=driver.current_url 获取当前页面URL
title=driver.title 获取当前页面title
text前边已经提及到,不赘述

关于查找Selenium WebDriver启动的浏览器进程的PIDselenium获取已经打开的浏览器对象的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于JavaSelenium Webdriver:修改navigator.webdriver标志以防止selenium检测、Selenium Chrome浏览器org.openqa.selenium.WebDriverException:等待驱动程序服务器启动时超时、Selenium WebDriver API 学习笔记(三):浏览器控制、Selenium WebDriver API 学习笔记(二):浏览器控制等相关内容,可以在本站寻找。

本文标签: