web自动化学习-键盘、JS、滚动以及文件上传操作

键盘操作: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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值