键盘操作:Keys
引入第三方库 Keys,支持多种键盘操作,具体可查看Keys实现
import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.common.keys import Keys
driver = webdriver.Chrome()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("selenium", Keys.ENTER)
# driver.find_element(By.ID, "kw").send_keys(Keys.CONTROL, "C")
time.sleep(3)
driver.quit()
关于DOM对象及JS操作
HTML DOM定义了访问和操作HTML文档的标准方法
DOM 将HTML文档表达为树结构
不管是元素还是样式,DOM对象都可以对其进行增删改查
python执行js代码:driver.execute_script(js代码,传递给js代码的参数)
# 示例:向日期框中输入指定日期
from time import sleep
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
driver = webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
sleep(2)
# js代码,方式1:
# js_code = 'a=document.getElementById("train_date");' \
# 'a.removeAttribute("readonly");' \
# 'a.value="2021-04-10"'
# driver.execute_script(js_code)
# sleep(10)
# driver.quit()
# 方式2:通过js的arguments变量传参
loc = (By.ID, "train_date")
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
ele = driver.find_element(*loc)
# 若需要将外部的值,传递给js代码,可以通过js的arguments变量专门用来接收外部参数。示例中ele为第一个参数即arguments[0],set_time为第二个参数即arguments[1]
set_time = "2021-04-10"
js_code = 'arguments[0].removeAttribute("readonly");' \
'arguments[0].value=arguments[1]'
driver.execute_script(js_code, ele, set_time)
滚动处理
让元素滚动到可见区域后,再操作。
- 大部分的网页自己会滚动,比如列表下方的下翻页,只要元素在页面上能定位到
- 元素本身:若不滚动,可使用属性 location_once_scrolled_into_view 将元素本身滚动到可见区域;
- js本身:element.scrollIntoView() 将元素本身滚动到可见区域;
js_code = ‘arguments[0].scrollIntoView()’
driver.execute_script(js_code,ele)
from time import sleep
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
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://www.baidu.com/")
driver.find_element(By.ID, "kw").send_keys("selenium", Keys.ENTER)
loc = (By.XPATH,"//a[text()='下一页 >']")
WebDriverWait(driver, 20).until(EC.visibility_of_element_located(loc))
ele=driver.find_element(*loc)
# 方案1:元素本身
# ele.location_once_scrolled_into_view
# 方案2:通过js操作
js_code = 'arguments[0].scrollIntoView()'
driver.execute_script(js_code,ele)
ele.click()
sleep(6)
driver.quit()
文件上传
方案一、引入第三方库pywinauto 通过窗口上传文件
- 安装 pip install pywinauto
- 缺点:只能在windows上使用
- 优点:可以选择多个文件,路径中有中文也可以使用
# 操作步骤
from pywinauto.keyboard import send_keys
# 输入文件名 ,需要同时上传多个文件,就多次调用send_keys()
send_keys(文件路径)
# 输入回车键
send_keys('{VK_RETURN}')
方案二、引入第三方库pyautogui 通过窗口上传文件
- 安装 pip install pyautogui
- 优点:跨平台(linux,mac,windows都可以使用)
- 缺点:只能选择一个文件,文件路径中不可以有中文
# 操作步骤
# 输入文件名
pyautogui.write(文件路径)
# 输入回车键,按两次
pyautogui.press('enter',presses=2)