什么是selenium?

基本使用

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support. wait import WebDriverWait
browser = webdriver.Chrome() # Chrom驱动
try:
browser.get("https://www.baidu.com") # 输入 www.baidu.com 网址
input = browser.find_element_by_id("kw") # 找到一个 kw 元素赋值为 input
input.send_keys("Python") # 在网页里敲入Python
input.send_keys(Keys.ENTER) # 在网页里敲入回车
wait=WebDriverWait(browser,10) # 等待10秒
wait.until(EC.presence_of_element_located((By.ID,"content_left"))) # 等待content_left元素被加载出来
print(browser.current_url) # 打印目前的url
print(browser.get_cookies()) # 打印cookies
# print(browser.page_source) # 打印 网页源代码
finally:
browser.close() # 关闭浏览器
https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=Python&rsv_pq=c618fa5900004b25&rsv_t=c25fWJbEN2wl13gOxRoocQDIAUMPaoguAnEu9Rg4KGX4uoRC0lynG5EjFGY&rqlang=cn&rsv_enter=1&rsv_sug3=6&rsv_sug2=0&inputT=162&rsv_sug4=162
[{'path': '/', 'value': '1468_21104_18559_26350_22075', 'secure': False, 'domain': '.baidu.com', 'httpOnly': False, 'name': 'H_PS_PSSID'}, {'path': '/', 'value': '3FFEC0A0709997465509BC1AFB51F757:FG=1', 'secure': False, 'domain': '.baidu.com', 'expiry': 3685018278.537968, 'httpOnly': False, 'name': 'BAIDUID'}, {'path': '/', 'value': '3FFEC0A0709997465509BC1AFB51F757', 'secure': False, 'domain': '.baidu.com', 'expiry': 3685018278.538044, 'httpOnly': False, 'name': 'BIDUPSID'}, {'path': '/', 'value': '', 'secure': False, 'domain': '.baidu.com', 'expiry': 3685018278.538084, 'httpOnly': False, 'name': 'PSTM'}, {'path': '/', 'value': '', 'secure': False, 'domain': 'www.baidu.com', 'expiry': 2483614633.353963, 'httpOnly': False, 'name': 'delPer'}, {'path': '/', 'value': '', 'secure': False, 'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_HOME'}, {'path': '/', 'value': 'B490B5EBF6F3CD402E515D22BCDA1598', 'secure': False, 'domain': '.baidu.com', 'expiry': 1537621032.332359, 'httpOnly': False, 'name': 'BDORZ'}, {'path': '/', 'value': '', 'secure': False, 'domain': 'www.baidu.com', 'expiry': 1538398632, 'httpOnly': False, 'name': 'BD_UPN'}, {'path': '/', 'value': '', 'secure': False, 'domain': 'www.baidu.com', 'httpOnly': False, 'name': 'BD_CK_SAM'}, {'path': '/', 'value': '', 'secure': False, 'domain': '.baidu.com', 'httpOnly': False, 'name': 'PSINO'}, {'path': '/', 'value': 'bf67l36p%2FgarFggwpeficZXTG5zE%2FhBZEp2ev5JvDSo8venU134svju%2FJL4', 'secure': False, 'domain': 'www.baidu.com', 'expiry': 1537537225, 'httpOnly': False, 'name': 'H_PS_645EC'}]

打印后的结果为:

生命浏览器对象

from selenium import webdriver
browser_1 = webdriver.Chrome()
browser_2 = webdriver.Firefox()
browser_3 = webdriver.Edge()
browser_4 = webdriver.PhantomJS()
browser_5 = webdriver.Safari()

访问页面

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("http://www.tabao.com")
print(browser.get_cookie)
browser.close()
<bound method WebDriver.get_cookie of <selenium.webdriver.chrome.webdriver.WebDriver (session="65ad512a5c81e7d9f6f3bd81a4ba3495")>>

打印后的结果为:

查找元素

单个元素

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
input_first = browser.find_element_by_id("q")
input_second = browser.find_element_by_xpath('//*[@id="q"]')
input_third = browser.find_element_by_css_selector("#q")
print(input_first)
print("----------------------------------------------------------------")
print(input_second)
print("----------------------------------------------------------------")
print(input_third)
browser.close()
<selenium.webdriver.remote.webelement.WebElement (session="72af913bda52ce0848486b08ba93d3a1", element="0.3093750540466209-1")>
----------------------------------------------------------------
<selenium.webdriver.remote.webelement.WebElement (session="72af913bda52ce0848486b08ba93d3a1", element="0.3093750540466209-1")>
----------------------------------------------------------------
<selenium.webdriver.remote.webelement.WebElement (session="72af913bda52ce0848486b08ba93d3a1", element="0.3093750540466209-1")>

打印的结果为:

比较通用的查找方式

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
input_first = browser.find_element(By.ID,'q')
print(input_first)
browser.close()

运行的结果与上面一样!

多个元素

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
input_first = browser.find_elements_by_css_selector(".service-bd li")
print(input_first)
browser.close()
[<selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-1")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-2")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-3")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-4")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-5")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-6")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-7")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-8")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-9")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-10")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-11")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-12")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-13")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-14")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-15")>, <selenium.webdriver.remote.webelement.WebElement (session="d52b2ef4ead695decaf705a0c331eb06", element="0.7934950105071805-16")>]

打印后的结果为:

元素交互操作

对获取的元素调用交互方法

from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get("https://www.taobao.com")
input = browser.find_element_by_id("q")
input.send_keys('iPhone')
time.sleep(1)
input.clear()
input.send_keys("iPad")
button = browser.find_element_by_class_name('btn-search')
button.click()
browser.close()

交互动作

将动作附加到动作链中串行执行

from selenium import webdriver
from selenium.webdriver import ActionChains browser = webdriver.Chrome()
url ='http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url) # 请求url
browser.switch_to.frame('iframeResult') # 切换到 frame
source = browser.find_elements_by_css_selector('#draggable')
target = browser.find_elements_by_css_selector('#droppable')
actions = ActionChains(browser) # 声明动作链
actions.drag_and_drop(source,target)
actions.perform() # 执行这个动作

执行JavaScript

from selenium import webdriver

browser = webdriver.Chrome()
browser.get('https://www.zhihu.com/explore')
browser.execute_script('window.scrollTo(0,document.body.scrollHeight)') # 滑动栏拖拽到最下方
browser.execute_script('alert("To Bottom")')

执行后的结果为:

获取元素信息

获取属性

from selenium import webdriver
from selenium.webdriver import ActionChains browser = webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
logo = browser.find_element_by_id('zh-top-link-logo')
print(logo)
print(logo.get_attribute('class'))
<selenium.webdriver.remote.webelement.WebElement (session="ef2d80c82e37098c4c702fe5c0e2df31", element="0.9948931372437708-1")>
zu-top-link-logo

打印后的结果为:

获取文本值

from selenium import webdriver
from selenium.webdriver import ActionChains browser = webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
input = browser.find_element_by_class_name('post-link')
print(input.text) # 打印获取的文本信息
《红色警戒》的世界:没有希特勒 二战死了1亿人

打印后的结果为:

获取ID、位置、标签名、大小

from selenium import webdriver
from selenium.webdriver import ActionChains browser = webdriver.Chrome()
browser.get("https://www.zhihu.com/explore")
input = browser.find_element_by_class_name('post-link')
print(input.text) # 打印获取的文本信息
print(input.id) # 获取id
print(input.location) # 获取位置
print(input.tag_name) # 获取标签名
print(input.size) # 获取大小
browser.close()
《红色警戒》的世界:没有希特勒 二战死了1亿人
0.22091173377675544-1
{'y': 304, 'x': 32}
a
{'height': 16, 'width': 306}

打印后的结果为:

Frame

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
browser = webdriver.Chrome()
url='http://www.runoob.com/try/try.php?filename=jqueryui-api-droppable'
browser.get(url)
browser.switch_to.frame('iframeResult')
source =browser.find_element_by_css_selector("#draggable")
print(source)
try:
logo=browser.find_element_by_class_name('logo')
except NoSuchElementException:
print("NO LOGO")
browser.switch_to.parent_frame()
logo = browser.find_element_by_class_name('logo')
print(logo)
print(logo.text)
<selenium.webdriver.remote.webelement.WebElement (session="ecfecc0e705df8976f5241726b66e273", element="0.27322378119978463-1")>
NO LOGO
<selenium.webdriver.remote.webelement.WebElement (session="ecfecc0e705df8976f5241726b66e273", element="0.8128333237150809-2")>
RUNOOB.COM

打印后的结果为:

等待

隐式等待

当使用了隐式等待执行测试的时候,如果WebDriver没有在DOM中找到元素,将继续等待,超出设定时间后则抛出找不到元素的异常,换句话说,当查找元素或元素并没有立即出现的时候,隐式等待将等待一段时间再查找DOM,默认的时间是0。

from selenium import webdriver

browser = webdriver.Chrome()
browser.implicitly_wait(10)
browser.get("https://www.zhihu.com/explore")
input = browser.find_element_by_class_name('zu-top-add-question')
print(input)
<selenium.webdriver.remote.webelement.WebElement (session="87a2e958b9a3b58334e8c2ec76d0419e", element="0.014192877625801792-1")>

打印后的结果为:

显示等待

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 browser = webdriver.Chrome()
browser.get("http://www.taobao.com/")
wait = WebDriverWait(browser,10)
input = wait.until(EC.presence_of_all_elements_located((By.ID,'q')))
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'btn-search')))
print(input,button)
Traceback (most recent call last):
File "C:/Users/Administrator/Desktop/正则表达式/正则表达式.py", line 10, in <module>
button = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'btn-search')))
File "C:\Users\Administrator\Desktop\正则表达式\venv\lib\site-packages\selenium\webdriver\support\wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message:

不知什么原因,总是超时

·title_is 标题是某内容
·title_contains 标题包含某内容
·presence_of_element located 元素加载出,传入定位元组,如(By.lD,p)
·visibility_of_element located 元素可见,传入定位元组
·visibility_of可见,传入元素对象
·presence_of_all_elements_located 所有元素加载出
·text_to_be_present_in_element某个元素文本龟含某文字
.text to_be_present_in_element_value 某个元素值包含某文字
·frame_to _be_available_and_switch_ to _it framea载并切换
·invisibility_of_element_located 元素不可见
·element_to_be_clickable 元素可点击
·staleness_of 判断一个元素是否仍在DOM,可判断页面是否已经刷新
·element to_be_selected 元素可选择,传元素对象
·element located_to_be_selected 元素可选择,传入定位元组
·element selection_state_to_be 传入元素对象以及状态,相等返回True,否则返回False
·element located_selection_state_to_be 传入定位元组以及状态,相等返回True,否则返回False
·alertis_present 是否出现Alert

前进后退

from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get("https://www.taobao.com/")
browser.get("https://www.baidu.com/")
browser.get("https://www.jingdong.com/")
browser.back()
time.sleep(1)
browser.forward()
browser.close()

Cookies

from selenium import webdriver

browser = webdriver.Chrome()
browser.get("http://www.zhihu.com/explore")
print(browser.get_cookies())
browser.add_cookie({"name":"name","domain":"www,zhihu.com","value":"germey"})
print(browser.get_cookies())
browser.delete_all_cookies()
print(browser.get_cookies())
[{'path': '/', 'httpOnly': False, 'name': 'l_n_c', 'domain': '.zhihu.com', 'secure': False, 'value': ''}, {'path': '/', 'httpOnly': False, 'name': 'tgw_l7_route', 'domain': 'www.zhihu.com', 'expiry': 1537604591.643548, 'secure': False, 'value': '156dfd931a77f9586c0da07030f2df36'}, {'path': '/', 'httpOnly': False, 'name': 'd_c0', 'domain': '.zhihu.com', 'expiry': 1632211696.283527, 'secure': False, 'value': '"AFCk5k4oQA6PTrVJvEIdM1iDREt1Ez3H0lw=|1537603702"'}, {'path': '/', 'httpOnly': False, 'name': '_xsrf', 'domain': '.zhihu.com', 'expiry': 1615363691.643627, 'secure': False, 'value': 'ZnQElKxeWBcoeNFASCTcgdhk56NJ83hf'}, {'path': '/', 'httpOnly': False, 'name': '__utmb', 'domain': '.zhihu.com', 'expiry': 1537605497, 'secure': False, 'value': '51854390.0.10.1537603697'}, {'path': '/', 'httpOnly': False, 'name': 'q_c1', 'domain': '.zhihu.com', 'expiry': 1632211692.325099, 'secure': False, 'value': '104b20902a9f4159b0c1811e7dd3959c|1537603698000|1537603698000'}, {'path': '/', 'httpOnly': False, 'name': 'r_cap_id', 'domain': '.zhihu.com', 'expiry': 1540195692.325146, 'secure': False, 'value': '"MWIwYjU3YmI1OWVkNGEwYmJhZGM0MTY5ZDQzZWU3MmQ=|1537603698|85c9986946afde9f1823ce067dc29aa2ea19d5f3"'}, {'path': '/', 'httpOnly': False, 'name': 'cap_id', 'domain': '.zhihu.com', 'expiry': 1540195692.325191, 'secure': False, 'value': '"OTVhZmIwZDkzYzliNDAzNWI4ZTJiNWM2NzY0NWFmMjQ=|1537603698|67c5e766f10d39421a3d3afc84d45dfed316ae18"'}, {'path': '/', 'httpOnly': False, 'name': 'l_cap_id', 'domain': '.zhihu.com', 'expiry': 1540195692.325236, 'secure': False, 'value': '"MDUzODliMmYwN2VlNDU1YjkwNGU0MjEwZDU0OTdkMjI=|1537603698|e44d90334d2319d2934c4b5cccb4d8d5a549247d"'}, {'path': '/', 'httpOnly': False, 'name': 'n_c', 'domain': '.zhihu.com', 'secure': False, 'value': ''}, {'path': '/', 'httpOnly': False, 'name': '_zap', 'domain': '.zhihu.com', 'expiry': 1600675697, 'secure': False, 'value': 'c7dbed92-9690-47b9-886e-d5539b1f74b8'}, {'path': '/', 'httpOnly': False, 'name': '__utma', 'domain': '.zhihu.com', 'expiry': 1600675697, 'secure': False, 'value': '51854390.1486460487.1537603697.1537603697.1537603697.1'}, {'path': '/', 'httpOnly': False, 'name': '__utmc', 'domain': '.zhihu.com', 'secure': False, 'value': ''}, {'path': '/', 'httpOnly': False, 'name': '__utmz', 'domain': '.zhihu.com', 'expiry': 1553371697, 'secure': False, 'value': '51854390.1537603697.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'}, {'path': '/', 'httpOnly': False, 'name': '__utmv', 'domain': '.zhihu.com', 'expiry': 1600675697, 'secure': False, 'value': '51854390.000--|3=entry_date=20180922=1'}]
[{'path': '/', 'httpOnly': False, 'name': 'l_n_c', 'domain': '.zhihu.com', 'secure': False, 'value': ''}, {'path': '/', 'httpOnly': False, 'name': 'tgw_l7_route', 'domain': 'www.zhihu.com', 'expiry': 1537604591.643548, 'secure': False, 'value': '156dfd931a77f9586c0da07030f2df36'}, {'path': '/', 'httpOnly': False, 'name': 'd_c0', 'domain': '.zhihu.com', 'expiry': 1632211696.283527, 'secure': False, 'value': '"AFCk5k4oQA6PTrVJvEIdM1iDREt1Ez3H0lw=|1537603702"'}, {'path': '/', 'httpOnly': False, 'name': '_xsrf', 'domain': '.zhihu.com', 'expiry': 1615363691.643627, 'secure': False, 'value': 'ZnQElKxeWBcoeNFASCTcgdhk56NJ83hf'}, {'path': '/', 'httpOnly': False, 'name': '__utmb', 'domain': '.zhihu.com', 'expiry': 1537605497, 'secure': False, 'value': '51854390.0.10.1537603697'}, {'path': '/', 'httpOnly': False, 'name': 'q_c1', 'domain': '.zhihu.com', 'expiry': 1632211692.325099, 'secure': False, 'value': '104b20902a9f4159b0c1811e7dd3959c|1537603698000|1537603698000'}, {'path': '/', 'httpOnly': False, 'name': 'r_cap_id', 'domain': '.zhihu.com', 'expiry': 1540195692.325146, 'secure': False, 'value': '"MWIwYjU3YmI1OWVkNGEwYmJhZGM0MTY5ZDQzZWU3MmQ=|1537603698|85c9986946afde9f1823ce067dc29aa2ea19d5f3"'}, {'path': '/', 'httpOnly': False, 'name': 'cap_id', 'domain': '.zhihu.com', 'expiry': 1540195692.325191, 'secure': False, 'value': '"OTVhZmIwZDkzYzliNDAzNWI4ZTJiNWM2NzY0NWFmMjQ=|1537603698|67c5e766f10d39421a3d3afc84d45dfed316ae18"'}, {'path': '/', 'httpOnly': False, 'name': 'l_cap_id', 'domain': '.zhihu.com', 'expiry': 1540195692.325236, 'secure': False, 'value': '"MDUzODliMmYwN2VlNDU1YjkwNGU0MjEwZDU0OTdkMjI=|1537603698|e44d90334d2319d2934c4b5cccb4d8d5a549247d"'}, {'path': '/', 'httpOnly': False, 'name': 'n_c', 'domain': '.zhihu.com', 'secure': False, 'value': ''}, {'path': '/', 'httpOnly': False, 'name': '_zap', 'domain': '.zhihu.com', 'expiry': 1600675697, 'secure': False, 'value': 'c7dbed92-9690-47b9-886e-d5539b1f74b8'}, {'path': '/', 'httpOnly': False, 'name': '__utma', 'domain': '.zhihu.com', 'expiry': 1600675697, 'secure': False, 'value': '51854390.1486460487.1537603697.1537603697.1537603697.1'}, {'path': '/', 'httpOnly': False, 'name': '__utmc', 'domain': '.zhihu.com', 'secure': False, 'value': ''}, {'path': '/', 'httpOnly': False, 'name': '__utmz', 'domain': '.zhihu.com', 'expiry': 1553371697, 'secure': False, 'value': '51854390.1537603697.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)'}, {'path': '/', 'httpOnly': False, 'name': '__utmv', 'domain': '.zhihu.com', 'expiry': 1600675697, 'secure': False, 'value': '51854390.000--|3=entry_date=20180922=1'}]
[]

打印后的结果为:

选项卡管理

from selenium import webdriver
import time browser = webdriver.Chrome()
browser.get("http://www.baidu.com")
browser.execute_script("window.open()") # 打开新的选项卡
print(browser.window_handles) # 返回所有窗口的一些引用
browser.switch_to_window(browser.window_handles[1]) # 切换到第二个选项卡
browser.get("https://www.taobao.com")
time.sleep(1)
browser.switch_to_window(browser.window_handles[0]) # 切换到第一个选项卡
browser.get("https://www.taobao.com")
browser.close()
['CDwindow-65E31D9BF9FDC0B83D2821ABB85DB273', 'CDwindow-C2A8A67F87828D4AEA0A9D391203121E']

打印的结果为:

异常处理

from selenium import webdriver
from selenium.common.exceptions import TimeoutException,NoSuchElementException browser = webdriver.Chrome()
browser.get("http://www.baidu.com") try:
browser.get("https://www.baidu.com")
except TimeoutException:
print("TIME OUT")
try:
browser.find_element_by_id("name")
except NoSuchElementException:
print("NO ELEMENT")
finally:
browser.close()
NO ELEMENT

打印后的结果为:

爬虫--selenium的更多相关文章

  1. [Python爬虫] Selenium实现自动登录163邮箱和Locating Elements介绍

    前三篇文章介绍了安装过程和通过Selenium实现访问Firefox浏览器并自动搜索"Eastmount"关键字及截图的功能.而这篇文章主要简单介绍如何实现自动登录163邮箱,同时 ...

  2. [Python爬虫] Selenium+Phantomjs动态获取CSDN下载资源信息和评论

    前面几篇文章介绍了Selenium.PhantomJS的基础知识及安装过程,这篇文章是一篇应用.通过Selenium调用Phantomjs获取CSDN下载资源的信息,最重要的是动态获取资源的评论,它是 ...

  3. [Python爬虫] Selenium获取百度百科旅游景点的InfoBox消息盒

    前面我讲述过如何通过BeautifulSoup获取维基百科的消息盒,同样可以通过Spider获取网站内容,最近学习了Selenium+Phantomjs后,准备利用它们获取百度百科的旅游景点消息盒(I ...

  4. [Python爬虫] Selenium爬取新浪微博客户端用户信息、热点话题及评论 (上)

    转载自:http://blog.csdn.net/eastmount/article/details/51231852 一. 文章介绍 源码下载地址:http://download.csdn.net/ ...

  5. python爬虫---selenium库的用法

    python爬虫---selenium库的用法 selenium是一个自动化测试工具,支持Firefox,Chrome等众多浏览器 在爬虫中的应用主要是用来解决JS渲染的问题. 1.使用前需要安装这个 ...

  6. [python爬虫] Selenium常见元素定位方法和操作的学习介绍

    这篇文章主要Selenium+Python自动测试或爬虫中的常见定位方法.鼠标操作.键盘操作介绍,希望该篇基础性文章对你有所帮助,如果有错误或不足之处,请海涵~同时CSDN总是屏蔽这篇文章,再加上最近 ...

  7. [python爬虫] Selenium常见元素定位方法和操作的学习介绍(转载)

    转载地址:[python爬虫] Selenium常见元素定位方法和操作的学习介绍 一. 定位元素方法 官网地址:http://selenium-python.readthedocs.org/locat ...

  8. 笔记-爬虫-selenium常用方法

    笔记-爬虫-selenium常用方法 1.      查找元素 常用的查找方法 find_element_by_name find_element_by_xpath find_element_by_l ...

  9. Python爬虫-selenium的使用(2)

    使用selenium打开chrome浏览器百度进行搜索 12345678910111213141516171819202122232425 from selenium import webdriver ...

  10. [Python爬虫] Selenium自动访问Firefox和Chrome并实现搜索截图

    前两篇文章介绍了安装,此篇文章算是一个简单的进阶应用吧!它是在Windows下通过Selenium+Python实现自动访问Firefox和Chrome并实现搜索截图的功能.        [Pyth ...

随机推荐

  1. 对象库(UI MAP)

    目的:能够使用配置文件存储被测页面上元素的定位方式和定位表达式,做到定位数据和程序的分离. 测试程序写好以后,可以方便不具备编码能力的测试人员进行自定义修改和配置 : package dataDriv ...

  2. 【前端学习笔记】arguments相关

    arguments转数组: (function() { console.log(arguments instanceof Array); // --> false console.log(Obj ...

  3. 通过父类定位到子类 先将父类当作一个dom

    通过父类定位到子类 先将父类当作一个dom 在此基础上在定位子类

  4. liunx less 命令

    1.命令格式: less [参数]  文件 2.命令功能: less 与 more 类似,但使用 less 可以随意浏览文件,而 more 仅能向前移动,却不能向后移动,而且 less 在查看之前不会 ...

  5. 【比赛】HNOI2018 总结

    一将功成万骨枯,我就是给那些队爷做基数的 一.比赛过程 Day1 看完题,暴力好打,然后就打 觉得第三题模型很好建啊,先看第三题吧(结果第三题是最..的) 图建出来,先看树的情况,设dp试一下 结果一 ...

  6. Hbase(二)hbase建表

    一.建表高级属性 下面几个 shell 命令在 hbase 操作中可以起到很到的作用,且主要体现在建表的过程中,看 下面几个 create 属性 1.bloomfilter 布隆过滤器 默认是 NON ...

  7. Java--Inheritance constructor继承中的构造方法问题(一)

    Java规定,一个父类可以同时拥有多个子类,但一个子类只能有一个父类,即单重继承,允许多层继承,即子类还可以有自己的子类,在下一层继承关系中原先的子类就变成了父类,这样的继承关系就形成了继承树. 子类 ...

  8. python安装包下载

    加入python官网一次按照下图点击: 这个exe文件就下好了,然后再安装一下即可.

  9. HDU 4352 数位dp

    XHXJ's LIS Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  10. 「Django」rest_framework学习系列-用户登录

    用户POST登录-->后台验证用户名密码-->验证正确返回TOKEN-->验证错误返回错误信息 class UserAPI(APIView): #用户登录类 def post(sel ...