python操作selenium

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunchengquan/article/details/80915241

Selenium 自动化测试工具。它支持各种浏览器,包括 Chrome,Safari,Firefox 等主流界面式浏览器

参考SeleniumPython文档

1 简单使用


"""
#driver.get方法会打开请求的URL
#webdriver提供了许多寻找页面元素的方法,find_element_by_*的方法
#输入来文本然后模拟点击了回车,就像我们敲击键盘一样。我们可以利用 Keys 这个类来模拟键盘输入
#获取网页渲染后的源代码,输出 page_source 属性即可,这样,我们就可以做到网页的动态爬取了。
#browser.quit()退出并关闭窗口的每一个相关的驱动程序
#browser.close()关闭当前窗口
"""
from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get("http://www.python.org")
assert "Python" in browser.title
elem = browser.find_element_by_name("q")
elem.send_keys("pyc")
elem.send_keys(Keys.RETURN)
assert "No results found." not in browser.page_source
print(browser.page_source)
# browser.quit()
# browser.close()

2 元素的定位

百度输入框信息

<input id="kw" class="s_ipt" type="text" maxlength="100" name="wd" autocomplete="off">

find_element_by_id

from selenium import webdriver
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
assert "百度" in driver.title
print(browser.title)
assert "No results found." not in browser.page_source
# browser.find_element_by_id("kw").send_keys("selenium")
elem = browser.find_element_by_id("kw")
elem.send_keys("selenium")
elem.send_keys(Keys.RETURN)

这里写图片描述

find_element_by_name

browser.find_element_by_name("wd").send_keys("selenium")

find_element_by_tag_name

browser.find_element_by_tag_name("input").send_keys("selenium")

find_element_by_class_name

browser.find_element_by_class_name("s_ipt").send_keys("selenium")

XPath 定位

browser.find_element_by_xpath("//input[@id='kw']").send_keys("selenium")

CSS 定位

'#' 表示 id
browser.find_element_by_css_selector("#kw").send_keys("selenium")

取name 属性
#<a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
browser.find_element_by_css_selector("a[name=\"tj_trnews\"]").click()

取class属性
<a class="RecycleBin xz" href="javascript:void(0);">
browser.find_element_by_css_selector("a.RecycleBin").click()

3 页面交互

获取了元素之后,下一步当然就是向文本输入内容了,可以利用下面的方法
element.send_keys("some text")
输入的文本都会在原来的基础上继续输入。用下面的方法来清除输入文本的内容
element.clear()

4 页面等待

隐式等待是等待特定的时间
显式等待是指定某一条件直到这个条件成立时继续执行

隐式等待

import time
from selenium import webdriver

browser = webdriver.Firefox()
browser.get("https://www.baidu.com/")
time.sleep(0.3)
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3)
browser.quit()

browser.implicitly_wait(30) #智能等待30秒
browser.find_element_by_id("kw").send_keys("selenium")
browser.find_element_by_id("su").click()
time.sleep(3) # 休眠3秒
browser.quit()

显式等待

指定某个条件,然后设置最长等待时间。如果在这个时间还没有找到元素,那么便会抛出异常了
下面是一些内置的等待条件,你可以直接调用这些条件,而不用自己写某些等待条件了

* title_is
* title_contains
* presence_of_element_located
* 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
* invisibility_of_element_located
* element_to_be_clickable – it is Displayed and Enabled.
* staleness_of
* element_to_be_selected
* element_located_to_be_selected
* element_selection_state_to_be
* element_located_selection_state_to_be
* alert_is_present
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.Firefox()
browser.get("https://www.baidu.com")
try:
    element = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.ID, "kw"))
    )
finally:
    browser.quit()

5 鼠标点击与键盘输入

#click 和 send_skys
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").clear()
browser.find_element_by_id("kw").send_keys("selenium")
time.sleep(2)
browser.find_element_by_id("su").click()

#通过 submit() 来操作
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
browser.find_element_by_id("kw").send_keys("selenium")
time.sleep(2)
browser.find_element_by_id("su").submit()

#text  获取元素文本
#把百度首页底部的声明打印输出
import time
from selenium import webdriver
browser = webdriver.Firefox()
browser.get("http://www.baidu.com")
time.sleep(2)
#id = cp 元素的文本信息
data=browser.find_element_by_id("cp").text
print(data) #打印信息
time.sleep(3)
browser.quit()

运行结果
©2017 Baidu 使用百度前必读 意见反馈 京ICP证030173号  京公网安备11000002000001号
Process finished with exit code 0

设置代理

Firefox



"""
代理
network.proxy.type 这个配置是个整数,默认是0,就是直接连接;1就是手工配置代理
如果有些资源是https的,是需要另外配置network.proxy.ssl和network.proxy.ssl_port的
"""

from selenium import webdriver

proxy = '103.88.234.245'

# proxy = {'https': '103.88.234.245:53281',
#            'http': '103.88.234.245:53281',
#            }
profile = webdriver.FirefoxProfile()
profile.set_preference('network.proxy.type', 1)
profile.set_preference('network.proxy.http', proxy)
profile.set_preference('network.proxy.http_port', 53281)
profile.set_preference('network.proxy.ssl', proxy)
profile.set_preference('network.proxy.ssl_port', 53281)
profile.update_preferences()
browser = webdriver.Firefox(profile)
browser.get('http://httpbin.org/ip')

这里写图片描述

PhantomJS

from selenium import webdriver
from pyquery import PyQuery as pq


service_args = [
    '--proxy=198.199.127.16:80 ',
    '--proxy-type=http',
    '--proxy-type=https',
]

browser = webdriver.PhantomJS(service_args=service_args)
browser.get('http://httpbin.org/ip')
doc = pq(browser.page_source)
print(doc('body').text())

运行结果

{"origin":"198.199.127.16"}

设置需要认证的代理

service_args = [
    '--proxy=198.199.127.16:80 ',
    '--proxy-type=http',
    '--proxy-type=https',
    '--proxy-auth=username:password'
]

获取cookie

from selenium import webdriver
browser = webdriver.PhantomJS()
# browser = webdriver.PhantomJS(service_args=service_args)
browser.get('https://www.genecards.org')
cookie = browser.get_cookies()
for i in cookie:
    print(i['name'],i['value'])

运行结果

raygun4js-userid 51099e2c-11c1-0166-86bb-c384cf95fc02
browserupdateorg pause
_gat 1
_gid GA1.2.1906682356.1530710487
_ga GA1.2.221345616.1530710487
incap_ses_461_146342 rryvepmQN2UJb/12Ic5lBsDJPFsAAAAAkls+1pVhEKJZAo76nhyzCw==
visid_incap_146342 M10ryux6Q9iZP/pajFpaxb/JPFsAAAAAQUIPAAAAAAAefXln9fte2b6wktmrgjec
nlbi_146342 SMxrItLmpSC4fySLi3zamgAAAABG0CHi0U8tTvJgoi/0+5ye
ARRAffinity dc678d58df1ee35a08daff7b2001005e0e20c35bb98bbe31351d5c1ef762ac67
rvcn 62184VC7sU1oLnXZJjHhemnOC0iAFGM726F7sZvTOmACb4Q1aQqYPzQkdMxVqHGdQ3RNZE1vMYcVguqeMxzWF7FPTog1
ASP.NET_SessionId qyve1rdqw1tgbyga0esjfqq5

猜你喜欢

转载自blog.csdn.net/sunchengquan/article/details/80915241