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 # 获得当前页的链接

 

 

 

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐