转载链接:https://www.cooooder.com/archives/20201224
通过命令发送到远程服务器来控制浏览器
# 加载浏览器驱动,打开一个页面
from selenium import webdriver
driver = webdriver.Chrome()
driver.add_cookie({'currentName':'edward'})
driver.add_cookie({'currentUrl':'https://www.cooooder.com'})
async with driver.add_js_error_listener() as error:
driver.find_element(By.ID, "throwing-mouseover").click()
assert error is not None
assert error.exception_details.stack_trace.call_frames[0].function_name == "onmouseover"
async with driver.add_listener(Console.log) as messages:
driver.execute_script("console.log('hello world')")
assert messages["message"] == "hello world"
driver.back()
driver.close()
driver.create_web_element("test")
driver.delete_all_cookies()
driver.delete_cookie('user_name')
driver.execute('goBack')
driver.execute('goForward')
driver.execute('addCookie', {'current_name':'administrator'})
script = "var callback = arguments[arguments.length - 1]; " \
"window.setTimeout(function(){ callback('timeout') }, 3000);"
driver.execute_async_script(script)
driver.execute_script('return document.title;')
# 例如: -> username
find_element_by_id('username')
# 例如: -> userpass
find_element_by_name('userpass')
# 例如: -> span
find_element_by_tag_name('span')
# 例如:xxxx标题 -> title
find_element_by_class_name('title')
# 例如:跳转百度页面
find_element_by_link_text('跳转百度页面')
# 例如:跳转百度页面
find_element_by_partial_link_text('跳转百度')
# xpath是一种定位元素的语言,有多种定位策略
#
#
#
#
# 用户名:
#
#
#
# 密码:
#
#
#
#
#
# 获取密码输入框
# 1. 绝对路径定位,根据标签代码的层级结构定位
find_element_by_xpath("/html/body/div/div[2]/input")
# 2. 利用元素属性定位
find_element_by_xpath("//input[@placeholder='请输入用户密码']")
# 3. 层级与属性结合
find_element_by_xpath("//div[@class='userpass']/input")
# 4. 使用逻辑运算符,连接多个属性
find_element_by_xpath("//input[@name='inputs' and @id='pass']")
# 5. 使用contains方法,格式:contains(@元素,模糊匹配值)
find_element_by_xpath("//div[contains(@class,'pass')]/input")
# 6. 使用text()方法
# 获取密码输入框前面的文字标签元素
find_element_by_xpath("//span[text(),'密码:']")
find_element_by_xpath("//span[contains(text(),'密码'])")
# CSS是描述HTML样式的语言,CSS使用选择器为元素绑定属性
# 选择器:通常定位样式格式 'xxxx {样式}',xxxx就是选择器,选择器指明了{}中样式的作用对象,也就是样式作用于HTML页面中的哪些元素
# CSS定位速度比XPath定位的速度快
选择器 | 示例 | 描述 |
---|---|---|
.class | .username | class选择器,选择class='username’的所有元素 |
#id | #userpass | id选择器,选择id="userpass"的所有元素 |
* | * | 选择所有元素 |
element | span | 选择所有元素 |
element > element | div > span | 选择父元素为 的所有span元素 |
element + element | span + input | 选择同一级中紧接在元素之后的所有元素 |
[attribute=value] | [placeholder=请输入用户名] | 选择 placeholder='请输入用户名’的所有元素 |
#
#
#
#
# 用户名:
#
#
#
# 密码:
#
#
#
#
#
# 1. class定位
#
# 点号(.)表示通过class定位元素
find_element_by_css_selector(".username")
# 2. id定位
#
# 井号(#)表示通过id来定位元素
find_element_by_css_selector("#userpass")
# 3. 标签名定位
#
# 直接使用标签名称定位
find_element_by_css_selector("span")
# 4. 标签层级关系定位
#
# 查找div中所有元素标签名为span的子元素
find_element_by_css_selector("div > span")
# 5. 通过属性定位
# 可以使用元素的任意属性定位
find_element_by_css_selector("[placeholder=请输入用户名]")
find_element_by_css_selector("[name=inputs]")
# 6. 组合定位
# 可以将上面的定位策略组合起来使用,大大加强了定位元素的唯一性
# 定位input标签,id属性为pass,它的父元素为div标签,class属性为userpass,通过以上条件定位元素
find_element_by_css_selector('div.userpass > input#pass')
其它更多定位参考:CSS选择器参考手册
driver.find_element(By.ID, "userpass")
driver.find_element(By.TAG_NAME, "span")
定位方式 | By |
---|---|
id | By.ID |
name | By.NAME |
class_name | By.CLASS_NAME |
tag_name | By.TAG_NAME |
link_text | By.LINK_TEXT |
partial_link_text | By.PARTIAL_LINK_TEXT |
css_selector | By.CSS_SELECTOR |
xpath | By.XPATH |
driver.forward()
driver.fullscreen_window()
driver.get('https://www.cooooder.com')
driver.get_cookie('current_name')
# [{'current_name':'admin'},{'current_role':'admin'}]
driver.get_cookies()
driver.get_log('browser')
driver.get_log('driver')
driver.get_log('client')
driver.get_log('server')
base_str = driver.get_screenshot_as_base64()
driver.get_screenshot_as_file('/Screenshots/screenshot.png')
driver.get_screenshot_as_png()
driver.get_window_position()
driver.get_window_rect()
driver.get_window_size()
driver.implicitly_wait(10)
driver.maximize_window()
driver.minimize_window()
driver.quit()
driver.refresh()
dirver.save_screenshot('/screenshots/raspberrypi.png')
driver.set_page_load_timeout(10)
driver.set_script_timeout(10)
driver.set_window_position(10, 10)
driver.set_window_rect(x=10, y=10, width=100, height=150)
driver.set_window_size(1024, 768)
capabilities = DesiredCapabilities.FIREFOX.copy()
capabilities['platform'] = "WINDOWS"
capabilities['version'] = "10"
driver.start_session(capabilities)
DesiredCapabilities.object:
CHROME = {'browserName': 'chrome', 'platform': 'ANY', 'version': ''}
EDGE = {'browserName': 'MicrosoftEdge', 'platform': 'ANY', 'version': ''}
FIREFOX = {'acceptInsecureCerts': True, 'browserName': 'firefox'}
HTMLUNIT = {'browserName': 'htmlunit', 'platform': 'ANY', 'version': ''}
HTMLUNITWITHJS = {'browserName': 'htmlunit', 'javascriptEnabled': True, 'platform': 'ANY', 'version': 'firefox'}
INTERNETEXPLORER = {'browserName': 'internet explorer', 'platform': 'WINDOWS', 'version': ''}
IPAD = {'browserName': 'iPad', 'platform': 'MAC', 'version': ''}
IPHONE = {'browserName': 'iPhone', 'platform': 'MAC', 'version': ''}
OPERA = {'browserName': 'opera', 'platform': 'ANY', 'version': ''}
SAFARI = {'browserName': 'safari', 'platform': 'MAC', 'version': ''}
WEBKITGTK = {'browserName': 'MiniBrowser', 'platform': 'ANY', 'version': ''}
WPEWEBKIT = {'browserName': 'MiniBrowser', 'platform': 'ANY', 'version': ''}
转载链接:https://www.cooooder.com/archives/20201224