PythonUI JS操作/窗口滚动/文件上传

一、JS操作

selenium没有封装修改页面属性的方法,只能获取属性(get_attribute),没有set_attribute

发送js代码

from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("http://www.baidu.com")
# 获取属性
e = driver.find_element_by_id("kw")
name = e.get_attribute("name")
print(name)
# 设置属性
def set_attribute():
    '''设置e的属性 e.value = '柠檬班'
       传入js代码
    e = document.getElementById("kw")
    e.name = "柠檬班"
    '''
    js_code = """
    e = document.getElementById("kw");
    e.name = "柠檬班";
    """
    driver.execute_script(js_code)

举例:修改12306选票日期

 

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("https://www.12306.cn/index/")
# 使用强制等待
time.sleep(5)
# 发送js代码给浏览器
js_code = """
e = document.getElementById("train_date");
e.readOnly = false;
e.value = "2020-07-22";
"""
driver.execute_script(js_code)
time.sleep(10)
driver.quit()

参数化---在JS中混入Python对象

import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("https://www.12306.cn/index/")
# 使用强制等待
time.sleep(5)

#使用python定位到元素,python对象e
e = driver.find_element_by_id("train_date")

# arguments[0]相当于python中的format,占坑符。
# arguments[0]表示execute_script函数中传的第一个参数e
js_code = 'arguments[0].readOnly = false;'
driver.execute_script(js_code,e)
time.sleep(1)

js_code = 'arguments[0].value = "2020-07-22";'
driver.execute_script(js_code,e)
time.sleep(10)
driver.quit()

二、窗口滚动

元素滑动到可见范围内

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("https://www.12306.cn/index/")
# 先定位 常见问题
questions_elem = driver.find_element_by_link_text("常见问题")
# 把常见问题的元素滑动到可见范围内
questions_elem.location_once_scrolled_into_view
time.sleep(3)
questions_elem.click()

滑动到页面最底部

import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("https://www.readhub.cn/topics")
# 滑动到页面最底部,滑动3次
for i in range(3):
js_code = 'window.scrollTo(0,document.body.scrollHeight);'
driver.execute_script(js_code)
三、文件上传
上传文件html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
        附件: <input type="file" name="mfile">
</body>
</html>
import time
from selenium import webdriver

driver = webdriver.Chrome()
driver.implicitly_wait(5)
driver.get("http://localhost:63342/workspace/Lemon/iframe.html?_ijt=6r1e63dp651r4vpi6sc968n4e4")
# 上传文件
elem = driver.find_element_by_name("mfile")
# 输入文件路径 ,上传文件时input元素 # send_keys 1:输入文本 2:输入键盘位置 3:发送文件 elem.send_keys("E:\demo.txt") time.sleep(3) driver.quit()

有的时候上传文件不是input元素,可能是其他的元素或组件

需要使用桌面操作 

pywin32(这个比较复杂,一般不用,不做详细介绍)

pywinauto (适用于Windows系统)

  • 安装 pip install pywinauto 

  • 浏览器页面操作:定位到组件-----点击上传文件(弹出window的文件选择窗口)

  • 初始化一个desktop()对象----->查询[""]弹框窗口名------>编辑输入查询的文件----->点击确认 

from pywinauto import Desktop

app = Desktop()
#根据名字找到弹出的窗口
dialog = app["打开"]

#在输入框中输入值
dialog["Edit"].type_keys(r"E:\test_file.txt")  #这里要使用原始字符串,否则\t会转移成tab,文件名出错

#点击
dialog["Button"].click()

pywingui (跨平台)

import pyautogui

pyautogui.write(r"e:\test_file.txt") #这里只能是小写,且不能是中文
pyautogui.press("enter",presses=2)#按2次enter键
time.sleep(2)

 

 

posted @ 2020-10-16 16:33  尐樣ル~  阅读(139)  评论(0编辑  收藏  举报