python_JS操作与文件上传
Posted 1142783691
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python_JS操作与文件上传相关的知识,希望对你有一定的参考价值。
一。JS操作
#1.js代码的调用
#execute_script 使用这个方法调用js代码
from selenium import webdriver
import time
driver=webdriver.Chrome()
driver.get("http:www.baidu.com")
driver.maximize_window()
element_baidu_input=driver.find_element_by_id("kw")
def set_attribute(e):
\'\'\'
execute_script - - >python中使用driver的这个方法调用js
:param e:
:return:
\'\'\'
a="e=document.getElementById(\'kw\');" \\
"e.value=\'商办网络\';"
driver.execute_script(a)
set_attribute(element_baidu_input)
#2.使用js修改时间格式的数据(格式中有readOnly只读属性)
# \'\'\'
# 在使用js修改元素的时候注意不同系统之间使用强制等待 等一下,js代码执行比较快如果浏览器渲染跟不上容易出问题;
# 在python中注意js数据的使用规范(readOnly在浏览器中是readonly,false是js的写法)
#在分开执行多个js代码时注意执行之间稍微等待一下防止出现意外
# \'\'\'
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
driver.maximize_window()
#不同系统之间项目等待
time.sleep(1)
js_data="e=document.getElementById(\'train_date\');" \\
"e.readOnly=false;" \\
"e.value=\'2020-07-22\';"
driver.execute_script(js_data)
#执行不同js代码时,避免错误率每个执行之间加时间间隔
js_code = """e = document.getElementById("train_date");"""
driver.execute_script(js_code)
time.sleep(0.2)
js_code = """e.readOnly = false;"""
driver.execute_script(js_code)
time.sleep(0.2)
js_code = """e.value = "2020-07-20";"""
driver.execute_script(js_code)
\'\'\'
3.使用js中的arguments方法,相当于python中的format
\'\'\'
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
# 使用强制等待
time.sleep(1)
# 使用 python 定位到元素, python 对象 elem
elem = driver.find_element_by_id("train_date")
# arguments[0] 相当于python format 占坑位
time.sleep(0.2)
js_code = """arguments[0].readOnly = false;"""
driver.execute_script(js_code, elem)
time.sleep(0.2)
js_code = """arguments[0].value = "2020-07-20";"""
driver.execute_script(js_code, elem)
4.不同系统之间一定要使用强制等待
#5.将元素移动到可视范围内
#使用 location_once_scrolled_into_view模块
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
#先定位常见问题
element_cjwt=driver.find_element_by_xpath(\'//a[text()="常见问题"]\')
element_cjwt.location_once_scrolled_into_view
element_cjwt.click()
#6.利用js代码滑动到页面最底部
#document.body.scrollHeight - - ->利用js代码获取元素的总高度
#window.scrollTo(x,y) - - ->把内容滚动到指定位置:x:横轴坐标;y:纵轴坐标.
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("https://www.12306.cn/index/")
#for i in range(3):
js_cript = \'window.scrollTo(0, document.body.scrollHeight);\'
driver.execute_script(js_cript)
time.sleep(3)
二。文件上传
#1。input标签
#send_keys():输入文本;输入键盘位置;文件发送
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://localhost:63342/python29/class_36_js%E5%92%8C%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.html?_ijt=a17p2ipk1kjrgo03tj591fq87s")
element_wjsc=driver.find_element_by_name("mfile")
element_wjsc.send_keys("E:\\\\test.jpg")
time.sleep(2)
html源文件:
#2.input标签不是一个普通的标签或者其中有组件,无法使用senk_keys时。如果文件上传对于的是windown系统
#使用pywinauto库操作并输入值
#pip install pywinauto下载;pywinauto默认win32库作为支撑
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://localhost:63342/python29/class_36_js%E5%92%8C%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.html?_ijt=a17p2ipk1kjrgo03tj591fq87s")
element_wjsc=driver.find_element_by_name("mfile")
element_wjsc.click()
from pywinauto import Desktop
win_click=Desktop()
win_dakai=win_click["打开"]
win_dakai["Edit"].type_keys("E:\\\\test.jpg")
win_dakai["Button"].click()
#win_dakai["Button"].click()
time.sleep(2)
html中的代码:
#2.input标签不是一个普通的标签或者其中有组件,无法使用senk_keys时。如果文件上传对于的是windown系统
#使用pywinauto库操作并输入值
#pip install pywinauto下载;pywinauto默认win32库作为支撑
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://localhost:63342/python29/class_36_js%E5%92%8C%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.html?_ijt=a17p2ipk1kjrgo03tj591fq87s")
element_wjsc=driver.find_element_by_name("mfile")
element_wjsc.click()
from pywinauto import Desktop
win_click=Desktop()
win_dakai=win_click["打开"]
win_dakai["Edit"].type_keys("E:\\\\test.jpg")
win_dakai["Button"].click()
#win_dakai["Button"].click()
time.sleep(2)
#3.如果出现多系统进行文件上传操作
#使用pyautogui - - >跨平台文件操作
import time
from selenium import webdriver
driver=webdriver.Chrome()
driver.get("http://localhost:63342/python29/class_36_js%E5%92%8C%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0/%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0.html?_ijt=a17p2ipk1kjrgo03tj591fq87s")
element_wjsc=driver.find_element_by_name("mfile")
element_wjsc.click()
#跨系统最好使用强制等待减少失误率
time.sleep(1)
#下载pyautogui库 - - -> pip3 install pyautogui 若安装错误下载源文件:https://pypi.org/project/PyAutoGUI
# 下载完成后放到python路径中使用python setup.py install进行安装
import pyautogui
# #方法一:
# #修改文件路径
# pyautogui.write("E:\\\\test.jpg")
# #连续点两次回车键
# pyautogui.press(\'enter\',presses=2)
# time.sleep(2)
#方法二,若无法使用修改路径的时候,就在输入框中进行copy文件路径
#复制pyperclip模块,copy方法
import pyautogui
import pyperclip
#copy文件路径
pyperclip.copy(\'E:\\\\test.jpg\')
time.sleep(2)
#在输入框中执行ctrl+v - - ->复制命令
pyautogui.hotkey(\'ctrl\', \'v\')
#连续点击两次回车键
pyautogui.press(\'enter\', presses=2)
time.sleep(2)
html代码:
以上是关于python_JS操作与文件上传的主要内容,如果未能解决你的问题,请参考以下文章
Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”