本篇文章给大家谈谈使用带有扩展名的Python,以及.crx文件运行SeleniumWebDriver的知识点,同时本文还将给你拓展linux无界面运行python+webdriver+seleniu
本篇文章给大家谈谈使用带有扩展名的Python,以及.crx文件运行Selenium WebDriver的知识点,同时本文还将给你拓展linux 无界面运行python + webdriver + selenium、Python + Selenium WebDriver Api 知识回顾、python + selenium WebDriver的环境配置、Python Selenium Chrome Webdriver等相关知识,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:- 使用带有扩展名的Python(.crx文件)运行Selenium WebDriver(python扩展名gui)
- linux 无界面运行python + webdriver + selenium
- Python + Selenium WebDriver Api 知识回顾
- python + selenium WebDriver的环境配置
- Python Selenium Chrome Webdriver
使用带有扩展名的Python(.crx文件)运行Selenium WebDriver(python扩展名gui)
我去了Chrome Extension Downloader,将.crx文件锁定为“ Adblock-Plus_v1.4.1”。
我把它扔到我正在工作的目录中,然后运行:
from selenium import webdriverchop = webdriver.ChromeOptions()chop.add_extension(''Adblock-Plus_v1.4.1.crx'')driver = webdriver.Chrome(chrome_options = chop)
它完全承认它的存在,但是它给了我看起来像一条ChromeDriver.exe
样式信息:
ERROR:extension_error_reporter.cc(56)] Extension error: Package is invalid: ''CRX_PUBLIC_KEY_INVALID''.
然后最终是一个webdriver异常:
selenium.common.exceptions.WebDriverException: Message: u''Extension could not be installed''
我几乎100%确信我的代码没有问题,因为它会在引发异常之前先放置ChromeDriver类型的消息。
我也试图去收拾它自己''C:\Documents and Settings\\*UserName*\Local Settings\ApplicationData\Google\Chrome\UserData\Default\Extensions''
在chrome://extensions/
与开发人员模式上,尝试使用已创建的.crx并得到了确切的相同的错误消息
我还尝试了另一种方式:
chop = webdriver.ChromeOptions()chop.add_argument(''--load_extension=Adblock-Plus_v1.4.1.crx'')driver = webdriver.Chrome(chrome_options = chop)
这不会导致异常,甚至不会导致Chrome驱动程序错误,但是如果我手动转到chrome://extensions/
它,则不会说扩展程序已加载…
我认为我的问题与实际的.crx文件本身有关。由于错误消息的性质…但是同时,我不确定,因为如果生成webdriver.Chrome()
会话,然后手动转到,则chrome://extensions/
可以物理拖放安装相同的.crx文件。
编辑:我意识到我实际上没有问一个问题,所以这里是:
我究竟做错了什么?为什么我无法加载此Chrome扩展程序?是我的代码还是.crx文件本身?
更新:@Pat Meeker我已经尝试过了,但是我在从Java到python的翻译中丢失了一些东西
capability =webdriver.DesiredCapabilities.CHROME
返回一个字典,其中包含我所有的参数i
,因此,我很确定我唯一需要做的就是添加参数。
options = webdriver.ChromeOptions()options.add_argument(''--user-data-dir=C:/Users/USER_NAME/AppData/Local/Google/Chrome/User Data/Default/'')
这就是我现在所拥有的,每当我尝试driver =webdriver.Chrome(chrome_options=options)
打开chrome时,似乎都记得它以前的位置,但是什么也没有,没有书签,没有扩展名也没有。
答案1
小编典典只需在程序中添加此额外的行
from selenium.webdriver.chrome.options import Options
它会工作…
像这样
from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionschop = webdriver.ChromeOptions()chop.add_extension(''Adblock-Plus_v1.4.1.crx'')driver = webdriver.Chrome(chrome_options = chop)
linux 无界面运行python + webdriver + selenium
遇到的问题:
selenium运行测试用例需要打开浏览器,在阿里云centos系统中打开也不能被直观的看到。不如直接使用无界面运行,打印相关运行日志即可。
解决办法:
让用例在Linux环境无界面执行。
代码如下:
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chrome_options = Options()
chrome_options.add_argument(''--no-sandbox'')#解决DevToolsActivePort文件不存在的报错
chrome_options.add_argument(''window-size=1920x3000'') #指定浏览器分辨率
chrome_options.add_argument(''--disable-gpu'') #谷歌文档提到需要加上这个属性来规避bug
chrome_options.add_argument(''--hide-scrollbars'') #隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument(''blink-settings=imagesEnabled=false'') #不加载图片, 提升速度
chrome_options.add_argument(''--headless'') #浏览器不提供可视化页面. linux下如果系统不支持可视化不加这条会启动失败
class webd:
driver = None
@classmethod
def setUpClass(cls,browser):
if cls.driver == None:
cls.driver=webdriver.Chrome(chrome_options=chrome_options)
@classmethod
def tearDownClass(cls):
if cls.driver:
cls.driver.quit()
cls.driver = None
Python + Selenium WebDriver Api 知识回顾
一直再用 Selenium WebDriver 但是用的都比较零散,也没有做过总结,今天借此机会,整理一下,方便大家使用时查阅
webDriver 的属性
[''CONTEXT_CHROME'', ''CONTEXT_CONTENT'', ''NATIVE_EVENTS_ALLOWED'', ''__class__'', ''__delattr__'', ''__dict__'', ''__dir__'', ''__doc__'', ''__eq__'', ''__format__'', ''__ge__'', ''__getattribute__'', ''__gt__'',
''__hash__'', ''__init__'', ''__init_subclass__'', ''__le__'', ''__lt__'', ''__module__'', ''__ne__'', ''__new__'', ''__reduce__'', ''__reduce_ex__'', ''__repr__'', ''__setattr__'', ''__sizeof__'', ''__str__'',
''__subclasshook__'', ''__weakref__'', ''_file_detector'', ''_is_remote'', ''_mobile'', ''_switch_to'', ''_unwrap_value'', ''_web_element_cls'', ''_wrap_value'', ''add_cookie'', ''application_cache'',
''back'', ''binary'', ''capabilities'', ''close'', ''command_executor'', ''context'', ''create_web_element'', ''current_url'', ''current_window_handle'', ''delete_all_cookies'', ''delete_cookie'',
''desired_capabilities'', ''error_handler'', ''execute'', ''execute_async_script'', ''execute_script'', ''file_detector'', ''file_detector_context'', ''find_element'', ''find_element_by_class_name'',
''find_element_by_css_selector'', ''find_element_by_id'', ''find_element_by_link_text'', ''find_element_by_name'', ''find_element_by_partial_link_text'', ''find_element_by_tag_name'',
''find_element_by_xpath'', ''find_elements'', ''find_elements_by_class_name'', ''find_elements_by_css_selector'', ''find_elements_by_id'', ''find_elements_by_link_text'',
''find_elements_by_name'', ''find_elements_by_partial_link_text'', ''find_elements_by_tag_name'', ''find_elements_by_xpath'', ''firefox_profile'', ''forward'', ''fullscreen_window'',
''get'', ''get_cookie'', ''get_cookies'', ''get_log'', ''get_screenshot_as_base64'', ''get_screenshot_as_file'', ''get_screenshot_as_png'', ''get_window_position'', ''get_window_rect'',
''get_window_size'', ''implicitly_wait'', ''install_addon'', ''log_types'', ''maximize_window'', ''minimize_window'', ''mobile'', ''name'', ''orientation'', ''page_source'', ''profile'',
''quit'', ''refresh'', ''save_screenshot'', ''service'', ''session_id'', ''set_context'', ''set_page_load_timeout'', ''set_script_timeout'', ''set_window_position'', ''set_window_rect'',
''set_window_size'', ''start_client'', ''start_session'', ''stop_client'', ''switch_to'', ''switch_to_active_element'', ''switch_to_alert'', ''switch_to_default_content'',
''switch_to_frame'', ''switch_to_window'', ''title'', ''uninstall_addon'', ''w3c'', ''window_handles'']
调用说明:
driver.属性值
变量说明:
# FileName : WebDriverApi.py
# Author : Adil
# DateTime : 2018/3/12 11:40
# SoftWare : PyCharm
from selenium import webdriver
import time
driver = webdriver.Firefox()
# driver.implicitly_wait(1)
driver.get("http://www.baidu.com/")
print(dir(driver)) # driver attributes
print(driver.current_url) # 用于获得当前页面的URL https://www.baidu.com/index.php?tn=56060048_5_pg&ch=6
print(driver.current_window_handle) # 用于获取当前窗口句柄 2147483651
print(driver.window_handles) # 用于获取所有窗口句柄 [''2147483651'']
print(driver.title) # 用于获取当前页面的标题 百度一下,你就知道
print(driver.page_source) # 用于获取页面html源代码
time.sleep(5)
# driver.implicitly_wait(10)
print("element")
elem = driver.find_element_by_id(''kw'')
print(dir(elem))
driver.quit()
函数说明:
1.driver.find_element*():定位元素,详看另外一篇博文:Selenuim+Python之元素定位总结及实例说明
2.driver.get(url):浏览器加载url。
实例:driver.get("http//:www.baidu.com")
3.driver.forward():浏览器向前(点击向前按钮)。
4.driver.back():浏览器向后(点击向后按钮)。
5.driver.refresh():浏览器刷新(点击刷新按钮)。
6.driver.close():关闭当前窗口,或最后打开的窗口。
7.driver.quit():关闭所有关联窗口,并且安全关闭session。
8.driver.maximize_window():最大化浏览器窗口。
9.driver.set_window_size(宽,高):设置浏览器窗口大小。
10.driver.get_window_size():获取当前窗口的长和宽。
11.driver.get_window_position():获取当前窗口坐标。
12.driver.get_screenshot_as_file(filename):截取当前窗口。
实例:driver.get_screenshot_as_file(''D:/selenium/image/baidu.jpg'')
13.driver.implicitly_wait(秒):隐式等待,通过一定的时长等待页面上某一元素加载完成。
若提前定位到元素,则继续执行。若超过时间未加载出,则抛出NoSuchElementException异常。
实例:driver.implicitly_wait(10) #等待10秒
14.driver.switch_to_frame(id或name属性值):切换到新表单(同一窗口)。若无id或属性值,可先通过xpath定位到iframe,再将值传给switch_to_frame()
15.driver.switch_to.parent_content():跳出当前一级表单。该方法默认对应于离它最近的switch_to.frame()方法。
16.driver.switch_to.default_content():跳回最外层的页面。
17.driver.switch_to_window(窗口句柄):切换到新窗口。
18.driver.switch_to.window(窗口句柄):切换到新窗口。
19.driver.switch_to_alert():警告框处理。处理JavaScript所生成的alert,confirm,prompt.
20.driver.switch_to.alert():警告框处理。
21.driver.execute_script(js):调用js。
22.driver.get_cookies():获取当前会话所有cookie信息。
23.driver.get_cookie(cookie_name):返回字典的key为“cookie_name”的cookie信息。
实例:driver.get_cookie("NET_SessionId")
24.driver.add_cookie(cookie_dict):添加cookie。“cookie_dict”指字典对象,必须有name和value值。
25.driver.delete_cookie(name,optionsString):删除cookie信息。
26.driver.delete_all_cookies():删除所有cookie信息。
页面元素属性
print(dir(elem))
[''__class__'', ''__delattr__'', ''__dict__'', ''__dir__'', ''__doc__'', ''__eq__'', ''__format__'', ''__ge__'', ''__getattribute__'', ''__gt__'', ''__hash__'', ''__init__'', ''__init_subclass__'',
''__le__'', ''__lt__'', ''__module__'', ''__ne__'', ''__new__'', ''__reduce__'', ''__reduce_ex__'', ''__repr__'', ''__setattr__'', ''__sizeof__'', ''__str__'', ''__subclasshook__'',
''__weakref__'', ''_execute'', ''_id'', ''_parent'', ''_upload'', ''_w3c'', ''anonymous_children'', ''clear'', ''click'', ''find_anonymous_element_by_attribute'', ''find_element'',
''find_element_by_class_name'', ''find_element_by_css_selector'', ''find_element_by_id'', ''find_element_by_link_text'', ''find_element_by_name'', ''find_element_by_partial_link_text'',
''find_element_by_tag_name'', ''find_element_by_xpath'', ''find_elements'', ''find_elements_by_class_name'', ''find_elements_by_css_selector'', ''find_elements_by_id'',
''find_elements_by_link_text'', ''find_elements_by_name'', ''find_elements_by_partial_link_text'', ''find_elements_by_tag_name'', ''find_elements_by_xpath'', ''get_attribute'',
''get_property'', ''id'', ''is_displayed'', ''is_enabled'', ''is_selected'', ''location'', ''location_once_scrolled_into_view'', ''parent'', ''rect'', ''screenshot'', ''screenshot_as_base64'',
''screenshot_as_png'', ''send_keys'', ''size'', ''submit'', ''tag_name'', ''text'', ''value_of_css_property'']
调用说明:
driver.find_element*.属性值
或
element=driver.find_element*
element.属性值
变量说明:
1.element.size:获取元素的尺寸。
2.element.text:获取元素的文本。
3.element.tag_name:获取标签名称。
函数说明:
1.element.clear():清除文本。
2.element.send_keys(value):输入文字或键盘按键(需导入Keys模块)。
3.element.click():单击元素。
4.element.get_attribute(name):获得属性值
5.element.is_displayed():返回元素结果是否可见(True 或 False)
6.element.is_selected():返回元素结果是否被选中(True 或 False)
7.element.find_element*():定位元素,用于二次定位。
python + selenium WebDriver的环境配置
想试用python语言来学习selenium WebDriver,首先需要搭建一个测试环境,从python安装到浏览器插件配置的详细步骤,总结如下:
一、python环境配置
1、从官网下载最新的一个python包https://www.python.org/downloads
2、python安装选择自定义安装,方便配置环境变量,其他安装步骤和其他软件安装一致
3、安装成功后去配置环境变量
4、去验证python的环境配置是否成功,打开cmd窗口,输入python,如果环境配置成功会出现安装的python版本信息
5、在python的安装目录下找到Scripts文件下的pip.exe,然后把该路径配置到环境变量中,如果没有该文件,需要单独去下载安装
配置成功后,在cmd窗口,输入pip,会出现如下信息
二、使用pip工具安装Selenium
1、进入pip所在安装目录执行下面命令可以在线安装
D:\Python\Scripts>pip install -U selenium
三、下载webdriver插件
1、chrome浏览器的webdriver下载地址 http://chromedriver.storage.googleapis.com/index.html ,需要找到浏览器版本对应的插件
2、把解压后的文件放在python文件下,和python.exe同一目录下
3、浏览器的安装路径也需要加入环境变量
四、验证webdriver插件环境是否配置成功
1、运行python.exe
from selenium import webdriver
brower=webdriver.Chrome() //能打开浏览器说明配置成功了
Python Selenium Chrome Webdriver
我开始自动化无聊的东西书,并且尝试通过python打开chrome网络浏览器。我已经安装了selenium和
我试图运行此文件:
from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysbrowser = webdriver.Chrome()browser.get(''https://automatetheboringstuff.com'')
但是正因为如此,我得到这个错误:
Traceback (most recent call last): File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\common\service.py", line 74, in start stdout=self.log_file, stderr=self.log_file) File "C:\Program Files (x86)\Python36-32\lib\subprocess.py", line 707, in __init__ restore_signals, start_new_session) File "C:\Program Files (x86)\Python36-32\lib\subprocess.py", line 990, in _execute_child startupinfo) FileNotFoundError: [WinError 2] The system cannot find the file specified
在处理上述异常期间,发生了另一个异常:
Traceback (most recent call last): File "C:/Program Files(x86)/Python36-32/test.py", line 5, in <module> browser = webdriver.Chrome() File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\chrome\webdriver.py",line 62, in __init__ self.service.start() File "C:\Program Files (x86)\Python36-32\lib\site-packages\selenium\webdriver\common\service.py",line 81, in start os.path.basename(self.path), self.start_error_message) selenium.common.exceptions.WebDriverException: Message: ''chromedriver'' executable needs to be in PATH. Please seehttps://sites.google.com/a/chromium.org/chromedriver/home
答案1
小编典典您需要 指定chromedriver所在的路径 。
从此处下载适用于所需平台的chromedriver。
将chromedriver放置在系统路径或代码所在的位置。
如果不使用系统路径,请链接您的
chromedriver.exe
(对于非Windows用户,简称为chromedriver
):browser = webdriver.Chrome(executable_path=r"C:\path\to\chromedriver.exe")
(设置executable_path
为chromedriver所在的位置。)
如果您在系统路径上放置了chromedriver,则可以通过以下操作来实现快捷方式:
browser = webdriver.Chrome()
- 如果您在基于Unix的操作系统上运行,则可能需要在下载chromedriver后更新chromedriver的权限,以使其可执行:
chmod +x chromedriver
今天关于使用带有扩展名的Python和.crx文件运行Selenium WebDriver的分享就到这里,希望大家有所收获,若想了解更多关于linux 无界面运行python + webdriver + selenium、Python + Selenium WebDriver Api 知识回顾、python + selenium WebDriver的环境配置、Python Selenium Chrome Webdriver等相关知识,可以在本站进行查询。
本文标签: