selenium+python的基本使用
selenium结合python的官方使用文档:https://selenium-python-zh.readthedocs.io/en/latest/index.html
一般需要引入的包:
from io import BytesIO
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
from selenium.webdriver import ActionChains, DesiredCapabilities
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
from PIL import Image, ImageFont, ImageDraw
import time
基本的开始流程:
chrome_options = Options()
chrome_options.add_argument('--headless') # 用Chrome 的无头模式
#ips = get_ip()
#chrome_options.add_argument('--proxy-server=http://{}:{}'.format(ips[0], ips[1]))
# chrome_options.add_argument('--disable-gpu')
driver = webdriver.Chrome(chrome_options=chrome_options)
# driver = webdriver.Chrome()
wait = WebDriverWait(driver, 20)
url = 'xxx'
driver.get(url)
设置页面大小:
driver.set_window_size(1920,1080)
定位、查找元素:
- find_element_by_id
- find_element_by_name
- find_element_by_xpath
- find_element_by_link_text
- find_element_by_partial_link_text
- find_element_by_tag_name
- find_element_by_class_name
- find_element_by_css_selector
一次查找多个元素 (这些方法会返回一个list列表):
- find_elements_by_name
- find_elements_by_xpath
- find_elements_by_link_text
- find_elements_by_partial_link_text
- find_elements_by_tag_name
- find_elements_by_class_name
- find_elements_by_css_selector
from selenium.webdriver.common.by import By
driver.find_element(By.XPATH, '//button[text()="Some text"]')
driver.find_elements(By.XPATH, '//button')
比如:
element = driver.find_element_by_id("passwd-id")
element = driver.find_element_by_name("passwd")
element = driver.find_element_by_xpath("//input[@id='passwd-id']")
element = driver.find_element_by_css_selector('.login-form')
continue_link = driver.find_element_by_link_text('Continue')
continue_link = driver.find_element_by_partial_link_text('Conti')
输入(账号):
password_element = driver.find_element_by_css_selector('.login-form .form .input.long[name="password"]')
email.send_keys(my_username)
password_element .send_keys(my_password)
拖放到某处:
element = driver.find_element_by_name("source") # 拖动按钮
target = driver.find_element_by_name("target")
from selenium.webdriver import ActionChains
action_chains = ActionChains(driver)
action_chains.drag_and_drop(element, target).perform()
在不同的窗口和框架之间移动
对于现在的web应用来说,没有任何frames或者只包含一个window窗口是比较罕见的。 WebDriver 支持在不同的窗口之间移动,只需要调用``switch_to_window``方法即可:
driver.switch_to_window("windowName")
所有的 driver 将会指向当前窗口,但是你怎么知道当前窗口的名字呢,查看打开他的javascript或者连接代码:
<a href="somewhere.html" target="windowName">Click here to open a new window</a>
或者,你可以在”switch_to_window()”中使用”窗口句柄”来打开它, 知道了这些,你就可以迭代所有已经打开的窗口了:
for handle in driver.window_handles:
driver.switch_to_window(handle)
你还可以在不同的frame中切换 (or into iframes):
driver.switch_to_frame("frameName")
通过“.”操作符你还可以获得子frame,并通过下标指定任意frame,就像这样:
driver.switch_to_frame("frameName.0.child")
如何获取名叫“frameName”的frame中名叫 “child”的子frame呢? 来自*top*frame的所有的frame都会被评估 (All frames are evaluated as if from *top*.)
一旦我们完成了frame中的工作,我们可以这样返回父frame:
driver.switch_to_default_content()
弹出对话框
Selenium WebDriver 内置了对处理弹出对话框的支持。 在你的某些动作之后可能会触发弹出对话框,你可以像下面这样访问对话框:
alert = driver.switch_to_alert()
它将返回当前打开的对话框对象。使用此对象,您现在可以接受、排除、读取其内容, 甚至可以在prompt对话框中输入(译注:prompt()是对话框的一种,不同于alert()对话框,不同点可以自行百度)。 这个接口对alert, confirm, prompt 对话框效果相同。 参考相关的API文档获取更多信息。
操作Cookies
# 打开一个页面 driver.get(“http://www.example.com”)
# 现在设置Cookies,这个cookie在域名根目录下(”/”)生效
cookie = {‘name’ : ‘foo’, ‘value’ : ‘bar’}
driver.add_cookie(cookie)
# 现在获取所有当前URL下可获得的Cookies
driver.get_cookies()
等待
xiayibu_weizhi = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, ".icon2.foot-3")))
常用的api:
driver.page_source # 获取当前页面的的text,在python中得到str格式的文本
driver.get_cookies() # 获得此时页面的所有cookies
driver.refresh() # 刷新当前页
driver.current_url # 获得当前页的链接
更多推荐
所有评论(0)