pip install selenium
即可安装selenium模块pip install selenium
tar zxvf 包名
、剪切到 /usr/bin目录下使用命令:sudo mv 解压出来的文件 /usr/bin
from selenium import webdriver
driver = webdriver.Chrome() # 创建chrome实例
driver = webdriver.Firefox() # 创建Fierfox 实例
from selenium import webdriver
driver = webdriver.Chrome() # 创建chrome实例
driver.get("www.zhihuishu.com")
元素 | 方法 | 异常 |
---|---|---|
id | driver.find_element_by_id() | NoSuchElementException |
name | driver.find_element_by_name() | NoSuchElementException |
class_name | driver.find_element_by_class_name() | NoSuchElementException |
link_txet | driver.find_element_by_link_text() | NoSuchElementException |
tag_name | driver.find_element_by_tag_name() | NoSuchElementException |
xpath | driver.find_element_by_xpath | NoSuchElementException |
css | driver.find_element_by_css_selector() | NoSuchElementException |
partial_link_text | driver.find_element_by_partial_link_text() | NoSuchElementException |
<html>
<body>
<form id="loginForm">
<p class="content">Site content goes here.p>
<h1>Welcomeh1>
<input name="username" type="text" />
<input name="password" type="password" />
<input name="continue" type="submit" value="Login" />
<input name="continue" type="button" value="Clear" />
<p class="content">Site content goes here.p>
<p>Are you sure you want to do this?p>
<a href="continue.html">Continuea>
<a href="cancel.html">Cancela>
form>
body>
<html>
示例
login_form = driver.find_element_by_id('loginForm')
username = driver.find_element_by_name('username')
login_form = driver.find_element_by_xpath("/html/body/form[1]")
绝对定位 (页面结构轻微调整就会被破坏)continue_link = driver.find_element_by_link_text('Continue')
heading1 = driver.find_element_by_tag_name('h1')
content = driver.find_element_by_class_name('content')
content = driver.find_element_by_css_selector('p.content')
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
ID = "id"
XPATH = "xpath"
LINK_TEXT = "link text"
PARTIAL_LINK_TEXT = "partial link text"
NAME = "name"
TAG_NAME = "tag name"
CLASS_NAME = "class name"
CSS_SELECTOR = "css selector"
匹配头部:self.driver.find_element_by_css_selector('div[style^="sp.gif"]').click()
匹配尾部:self.driver.find_element_by_css_selector('div[style$="sp.gif"]').click()
匹配中间:self.driver.find_element_by_css_selector('div[style*="sp.gif"]').click()
xpath中的模糊匹配:
匹配开始:starts-with
比如:driver.find_elements_by_xpath('//li[starts-with(@class,"clearfix video")]')
匹配属性中包含的字符串:contains
比如:driver.find_elements_by_xpath('//li[contains(@class,"clearfix video")]')
匹配显示文本信息:text()
比如:driver.find_elements_by_xpath(//a[text()='智慧树'])
现在的大多数的Web应用程序是使用Ajax技术。当一个页面被加载到浏览器时, 该页面内的元素可以在不同的时间点被加载。这使得定位元素变得困难, 如果元素不再页面之中,会抛出 ElementNotVisibleException 异常。 使用 waits, 我们可以解决这个问题。waits提供了一些操作之间的时间间隔- 主要是定位元素或针对该元素的任何其他操作。
会让WebDriver等待满足一定的条件以后再进一步的执行。
使用方法:WebDriverWait(driver, 超时时间, 调用频率, 要忽略的异常).until(要执行的方法, 超时时返回的错误信息)
WebDriverWait结合ExpectedCondition 是实现的一种方式
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
WebDriverWait (driver, timeout=True, poll_frequency=10).until (EC.presence_of_element_located ((By.CLASS_NAME, "topic-item")))
# 如果在timeout的时间内没有找到就会抛出` TimeoutException` 异常
driver当前实例的对象
timeout:最长等待的时间
poll_frequency:多少秒检测一次 默认0.5
EC.presence_of_element_located ((By.CLASS_NAME, “topic-item”)):判断class_name=topic-item元素是否已经成功加载。
忽略异常:如果在调用until或until_not的过程中抛出这个元组中的异常,则不中断代码,继续等待,如果抛出的是这个元组外的异常,则中断代码,抛出异常。默认只有NoSuchElementException。
until()方法:条件成立为真
until_not()方法:条件不成立为真也就是没有指定的元素为真
element_located_selection_state_to_be():判断一个元素的状态是否是给定的选择状态
element_selection_state_to_be():判断给定的元素是否被选中
element_located_to_be_selected():期望某个元素处于被选中状态
element_to_be_selected():期望某个元素处于选中状态
element_to_be_clickable():判断元素是否可见并且能被单击,条件满足返回页面元素对象,否则返回Flase
frame_to_be_available_and_switch_to_it():判断frame是否可用
invisibility_of_element_located():希望某个元素不可见或者不存在DOM中,满足条件返回True,否则返回定位到的元素对象
visibility_of_element_located():希望某个元素出现在DOM中并且可见,满足条件返回该元素的页面元素对象
visibility_of():希望某个元素出现在页面的DOM中,并且可见,满足条件返回该元素的页面元素对象
visibility_of_any_elements_located():希望某个元素出现在DOM中并且可见
presence_of_all_elements_located():判断页面至少有一个如果元素出现,如果满足条件,返回所有满足定位表达式的压面元素
presence_of_element_located(locator):判断某个元素是否存在DOM中,不一定可见,存在返回该元素对象
staleness_of(webelement):判断一个元素是否仍在DOM中,如果在规定时间内已经移除返回True,否则返回Flase
text_to_be_present_in_element():判断文本内容test是否出现在某个元素中,判断的是元素的text
text_to_be_present_in_element_value():判断text是否出现在元素的value属性值中
title_contains():判断页面title标签的内容包含partial_title,只需要部分匹配即可,包含返回True,不包含返回Flase
title_is():判断页面title内容是与传入的title_text内容完全匹配,匹配返回True,否则返回Flase
让Webdriver等待一定的时间后再才是查找某元素。
implicitly_wait(3)
如果在规定时间内网页加载完成,则执行下一步,否则一直等到时间结束 import time
time.sleep(3)
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
driver.execute_script()
driver.execute_script ('document.getElementById("lUsername").value="{}"'.format (username))
driver.execute_script ('document.getElementById("lUsername").click())
from selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument('user-agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"')
driver = webdriver.Chrome(chrome_options = options)
from selenium import webdriver
options = webdriver.ChromeOptions ()
chromeOptions = webdriver.ChromeOptions()
chromeOptions.add_argument('--proxy-server=http://ip:port')
# 设置ip还有端口
driver = webdriver.Chrome(chrome_options=chromeOptions)
chrome_options.add_argument('--user-agent=""') # 设置请求头的User-Agent
chrome_options.add_argument('--window-size=1280x1024') # 设置浏览器分辨率(窗口大小)
chrome_options.add_argument('--start-maximized') # 最大化运行(全屏窗口),不设置,取元素会报错
chrome_options.add_argument('--disable-infobars') # 禁用浏览器正在被自动化程序控制的提示
chrome_options.add_argument('--incognito') # 隐身模式(无痕模式)
chrome_options.add_argument('--hide-scrollbars') # 隐藏滚动条, 应对一些特殊页面
chrome_options.add_argument('--disable-javascript') # 禁用javascript
chrome_options.add_argument('--blink-settings=imagesEnabled=false') # 不加载图片, 提升速度
chrome_options.add_argument('--headless') # 浏览器不提供可视化页面
chrome_options.add_argument('--ignore-certificate-errors') # 禁用扩展插件并实现窗口最大化
chrome_options.add_argument('--disable-gpu') # 禁用GPU加速
chrome_options.add_argument('–disable-software-rasterizer')
chrome_options.add_argument('--disable-extensions') # 禁用扩展
chrome_options.add_argument('--start-maximized') # 最大化
extension_path = '插件路径'
chrome_options.add_extension(extension_path)
from selenium import webdriver
chrome_options = webdriver.ChromeOptions()
prefs = {"profile.managed_default_content_settings.images": 2}
chrome_options.add_experimental_option("prefs", prefs)
prefs = {"": ""}
prefs["credentials_enable_service"] = False
prefs["profile.password_manager_enabled"] = False
chrome_options.add_experimental_option ("prefs", prefs)
禁用浏览器弹窗
prefs = {
'profile.default_content_setting_values' : {
'notifications' : 2
}
}
chrome_options.add_experimental_option('prefs',prefs)
driver.delete_all_cookies()# 删除cookie
driver.add_cookie({'name':'ABC','value':'DEF'}) # 携带cookie
driver.get_cookies() # 获取cookie
公众号:Linux下撸python
期待和你再次相遇
愿你学的愉快