python如何实现在网页里写入指定数据,或者上传指定文件

1.不是ftp.是点击某个网页(登录密码和账号),点击某个按钮,选取指定文件,在浏览里导入
2.点击某个网页,点击指定界面,用python把数据写到指定的格子里,取代人一个一个的写进去

其实这个功能就别什么python了,直接按键精灵那种模拟点击的宏去操作就行

有几种解决方式:
1.图像识别+模拟键鼠点击,可以理解为通过图像识别模拟人操作浏览器的过程,完全可以实现你的需求
优点:大部分重复性工作都可以通过这种方式取代
缺点:效率低,通常每台电脑可以取代一个人
2.通过对目标网站抓包,直接用http请求对指定网页上传数据等等所有操作
优点:简单粗暴,效率很高,稳定,多线程,一台电脑相当于成千上万人
缺点:这个网站是不是属于你的,或者只用于非盈利性行为,或者网站管理员有授权可以采用这种方式,避免法律风险
3.通过js操作模拟网页填表,部分操作可能需要配合键鼠和图像识别
4.如果网站你有管理权,直接开放对应的权限操作后端服务器的文件和数据库,批量导入和上传
优点:简单快捷,傻瓜式
缺点:要有网站所有权

网上关于python实现在网页里写入指定数据,对应的方案有很多,但是可能题主也看了很多但是没有找到对应的,这时候其实就是实现这个项目功能的难点,而这个难点可以分解为一些小的点去实现,然后再去衔接完善整体的功能。

看题主的需要就是用代码实现自动化操作,
有互联网编程基础,用python的selenium或者request都可以解决。
没有编程基础,去网上找个rpa机器人就行了啊

如果网站数据是通过ajax类似方式进行交互的,可以先分析一下接口请求方式,然后通过python模拟请求,如果接口有签名,用接口方式模拟比较复杂,可以通过Selenium 模拟请求。


def upload_to_linux(local_dir = LOCAL_DIR, remote_dir = REMOTE_DIR):

try:

t = paramiko.Transport((hostname, port))

t.connect(username=username, password=password)

sftp = paramiko.SFTPClient.from_transport(t)

print('Upload file start %s ' % datetime.datetime.now())

for root, dirs, files in os.walk(local_dir):

for filespath in files:

local_file = os.path.join(root, filespath)

print('待上传的本地文件:%s' % local_file)

a = local_file.replace(local_dir, '').replace('\\', '/').lstrip('/')

remote_file = os.path.join(remote_dir, a)

print('远程目的地文件:%s' % remote_file)

try:

sftp.put(local_file, remote_file)

except Exception as e:

sftp.mkdir(os.path.split(remote_file)[0])

sftp.put(local_file, remote_file)

print("Upload %s to remote %s" % (local_file, remote_file))

for name in dirs:

local_path = os.path.join(root, name)

print(0, local_path, local_dir)

a = local_path.replace(local_dir, '').replace('\\', '')

print(1, a)

print(1, remote_dir)

remote_path = os.path.join(remote_dir, a)

print(33, remote_path)

try:

sftp.mkdir(remote_path)

print(44, "mkdir path %s" % remote_path)

except Exception as e:

print(55, e)

print('Upload file success %s ' % datetime.datetime.now())

t.close()

except Exception as e:

print(88, e)

可以用python 加 selenium编程实现哦

你说的这些需求都是希望在浏览器中实现,而在浏览器中实现这些功能通常是用 JavaScript 的,这些是所谓的前端编程技术。

如果非要用 python 写前端,可能只有用 wasm 之类的技术,不过难度更高了,还不如用 js 来得简单快捷。

当然,你提到的需求有一部分可能还需要后端服务的支持,这里可能可以使用 python 来实现,创建一个网站服务来实现上传,因此关键还在于弄清楚自己真正需要的是什么,具体可以联系我, 我帮你分析分析。😁

用python往网页里面写数据和上传文件恐怕不是太现实,如果想写一个客户端程序可以用python来实现,如果是重复性的工具,建议用客户端程序实现,不建议用浏览器来做。

题主可以使用python selenium chromedriver 实现selenium操作chrome浏览器抓取网页数据内容自动填表功能
要做的准备工作:
一、安装selenium库及相关文件
Selenium库是python用于爬虫网站的自动化工具,支持的浏览器包括Chrome、Firefox、Safari等主流界面浏览器,同时也支持多种操作系统如Windows、Linux、IOS、Android等。

1.安装selenium库
(1)点击win10的开始菜单,直接输入cmd后右键管理员方式运行
(2)若安装python时勾选了添加路径的选项,即可直接输入命令
pip install selenium
(若没有添加,建议卸载python后,重新安装并勾选添加路径。慎重选择该建议,因为需要重新安装之前的下载的库)
(3)在网络连通下等待完成,若提示timeout,则可尝试下面命令切换下载源,重新安装:pip install selenium -i https://pypi.douban.com/simple

2.下载谷歌浏览器相关文件
本文使用的浏览器为谷歌浏览器,因此只介绍谷歌浏览器的爬虫方法,其他浏览器的方法类似。

(1)点击下载谷歌浏览器
(2)安装谷歌浏览器后,查看谷歌浏览器的版本号。点击谷歌浏览器右上角的三个点,选择–帮助–关于Google Chrome–查看版本号。

img


(3)点击下载谷歌浏览器驱动
打开下载驱动的页面,找到与版本号对应的驱动版本,比如84.0.4147.125,因此如图寻找84.0开头的驱动,点击打开下载对应系统的驱动。然后将其解压到准备编写项目的文件夹。
不要将其放置python目录或者浏览器安装目录下,如果这样做,当移植到别的电脑时,会出现各种各样的BUG,根本原因是你电脑装了相应的库文件以及驱动,但移植的电脑未必安装。
二、selenium快速入门
1.定位元素的八种方式
(1) id
(2) name
(3) xpath
(4) link text
(5) partial link text
(6) tag name
(7) class name
(8) css selector

  1. id方式
    (1) 在selenium通过id定位一个元素: find_element_by_id
    以百度的页面为例,其百度一下输入框部分网页源代码如下:
<html>
  <head>
  <body link="#0000cc">
    <a id="result_logo" href="/" onmousedown="return c({'fm':'tab','tab':'logo'})">
    <form id="form" class="fm" name="f" action="/s">
      <span class="soutu-btn"></span>
        <input id="kw" class="s_ipt" name="wd" value="" maxlength="255" 

        <input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn">

其中,为输入框的网页代码,<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn>"为百度一下的网页代码
通过id查找元素的代码及注释如下:

import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过id搜索清除搜索框内容##
浏览器驱动.find_element_by_id("kw").clear()
##通过id搜索输入搜索框内容##
浏览器驱动.find_element_by_id("kw").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
##通过id搜索点击百度一下进行搜索##
浏览器驱动.find_element_by_id("su").click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit() 
  1. name方式
    仍以百度输入框为例,在selenium通过name定位一个元素: find_element_by_name
    其代码及注释如下:
import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过name搜索清除搜索框内容##
浏览器驱动.find_element_by_name("wd").clear()
##通过name搜索输入搜索框内容##
浏览器驱动.find_element_by_name("wd").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
##通过id搜索点击百度一下进行搜索##
浏览器驱动.find_element_by_id("su").click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit()   
  1. xpath方式
    仍以百度输入框为例,在selenium通过xpath定位一个元素: find_element_by_xpath。不过这种方法不适合于网页中位置会变动的表格元素,因为xpath方式指向的是固定行和列,无法检测行列内容的变化。
    首先在谷歌浏览器中打开百度,在空白处右键鼠标,选择检查(N)这个选择,可以进入网页的开发者模式,如图所示。然后在百度输入框上右键鼠标,再次点击检查(N)选择,可以发现右侧代码框中自动选中的部分已经变成百度输入框的代码。最后,在右侧自动选中的代码段上右键–选择copy–选择copy Xpath,百度输入框的xpath为 //[@id="kw"],百度一下的xpath为 //[@id="su"]
    接下来利用这个值进行百度搜索,代码及注释如下。

    img


    img

    import os
    import sys
    import time
    from selenium import webdriver
    ##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
    当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
    ##配置谷歌浏览器驱动路径##
    谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
    ##初始化selenium控件##
    浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
    ##打开链接,更换其他网址,请注意开头要带上http://##
    浏览器驱动.get("http://www.baidu.com")
    ##通过xpath搜索清除搜索框内容,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_xpath('//*[@id="kw"]').clear()
    ##通过xpath搜索输入搜索框内容,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_xpath('//*[@id="kw"]').send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
    ##通过xpath搜索点击百度一下进行搜索,注意单引号与双引号的混合使用##
    浏览器驱动.find_element_by_xpath('//*[@id="su"]').click()
    ##保持5s时间
    time.sleep(5)
    ###关闭退出浏览器
    浏览器驱动.quit() 
    
  2. link text和partial link text方式
    仍以百度首页中新闻元素为例,
    通过link text定位一个元素: find_element_by_link_text
    通过partial link text定位一个元素:find_element_by_partial_link_text
    它们两个的区别在于:link text方式为元素text属性的全称,partial link text方式为元素text属性的部分,类似模糊搜索,如果网页元素有较多相似的text属性,建议不要使用partial link text方式。
    百度首页中新闻部分的网页代码如下:

 <div id="u1">
   <a href="http://news.baidu.com" name="tj_trnews" class="mnav">新闻</a>
   <a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a>
   <a href="http://map.baidu.com" name="tj_trmap" class="mnav">地图</a>
   <a href="http://v.baidu.com" name="tj_trvideo" class="mnav">视频</a>

下面利用link text的方式点击进人新闻页面,代码及其注释如下所示:

import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过link text搜索清除搜索框内容##
浏览器驱动.find_element_by_link_text('新闻').click()
##通过partial link text搜索清除搜索框内容,请注意实际运行时,选择其中一个##
##浏览器驱动.find_element_by_partial_link_text('新').click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit() 


  1. css selector方式
    仍以百度输入框为例,在selenium通过css selector定位一个元素: find_element_by_css_selector。由上文可知,为输入框的网页代码,<input type="submit" value="百度一下" id="su" class="btn self-btn bg s_btn>"为百度一下的网页代码,那么以css selector方式进行元素搜索的代码及其注释如下:
import os
import sys
import time
from selenium import webdriver
##此方法获取的工作文件夹路径在py文件下或封装exe后运行都有效##
当前工作主路径 = os.path.dirname(os.path.realpath(sys.argv[0]))
##配置谷歌浏览器驱动路径##
谷歌驱动器驱动 = 当前工作主路径+"/"+"chromedriver.exe"
##初始化selenium控件##
浏览器驱动 = webdriver.Chrome(executable_path=谷歌驱动器驱动)
##打开链接,更换其他网址,请注意开头要带上http://##
浏览器驱动.get("http://www.baidu.com")
##通过xpath搜索清除搜索框内容,注意单引号与双引号的混合使用##
浏览器驱动.find_element_by_css_selector("input[id=\"kw\"]").clear()
##通过xpath搜索输入搜索框内容,注意单引号与双引号的混合使用##
浏览器驱动.find_element_by_css_selector("input[id=\"kw\"]").send_keys("python+selenium库 实现爬虫抓取网页数据内容并自动填表的解决方法并附已交付甲方实际稳定运行的代码")
##通过xpath搜索点击百度一下进行搜索,注意单引号与双引号的混合使用##
浏览器驱动.find_element_by_css_selector("input[type=\"submit\"]").click()
##保持5s时间
time.sleep(5)
###关闭退出浏览器
浏览器驱动.quit() 

这是文件上传的,和刚刚说的一样,就是模拟, python模拟登陆导入网站,点击相关功能来实现自动导入。
代码如下:

#!/usr/bin/env python
# coding=utf-8
# import time
from selenium import webdriver
import os
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
# import requests
# from selenium.webdriver.common.keys import Keys
 
# 自动化操作导入功能
def ui_auto_operation():
    # 模拟登陆
    # rep = requests.Session()
    browser = webdriver.Firefox()
    browser.implicitly_wait(10)  # 设置隐性等待,等待10S加载出相关控件再执行之后的操作
    browser.maximize_window()
    browser.get('http://www.*******.com.cn/****/Login.aspx')
    # time.sleep(10) # 强制等待一般只用于测试
    # browser.refresh()
    # 输入用户名
    username = browser.find_element_by_xpath('//*[@id="txtUserName"]')
    username.clear()
    username.send_keys('*******')
    print('username input success')
    # 输入密码
    browser.find_element_by_xpath('//*[@id="txtPassword"]').send_keys('******')
    print('password input success')
    # # 加载验证码
    # yzm = browser.find_element_by_xpath('/html/body/div[2]/div/div[2]/form/dl[3]/dd/input')
    # yzm.send_keys(input('输入验证码:'))
    # 点击登陆
    browser.find_element_by_xpath('//*[@id="btnLogin"]').click()
    print('login success')
    # cookies = browser.get_cookies()
    # for cookie in cookies:
    #    rep.cookies.set(cookie['name'], cookie['value'])
    # 爬取对应网页的数据
    browser.current_window_handle
    browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/div[8]/div/a/span').click()
    # 切换到当前窗口
    browser.current_window_handle
    # time.sleep(5)
    tow_drive = browser.find_element_by_xpath('/html/body/div[2]/div[1]/div[1]/div[8]/ul/li[5]/a')
    tow_drive.click()
    print('turn success')
    browser.current_window_handle
    # time.sleep(2)
    # 切换到iframe框架里面
    browser.switch_to.frame(browser.find_element_by_xpath('//*[@id="mainFrame"]'))
    # # 输入框只读属性的修改
    # js = 'document.getElementById("Text1").removeAttribute("readonly");'
    # browser.execute_script(js)
    # # 定位并且输入路径数据
    # receiveStart = browser.find_element_by_xpath('//*[@id="Text1"]')
    # receiveStart.clear()
    # receiveStart.send_keys('C:\\fakepath\\5096.xls')
    # # receiveStart.send_keys(Keys.RETURN)
    # 点击上传文件按钮
    browser.find_element_by_xpath('//*[@id="btn1"]').click()
    # 调用写好的exe实现上传,autoup.exe的建立参考下面的网站
    # https://www.cnblogs.com/sunjump/p/7268805.html
    os.system("C:\\fakepath\\autoup.exe")
    # time.sleep(5)
    load = browser.find_element_by_xpath('//*[@id="btn_lead"]')
    load.click()
    try:
        # 每隔2s就去扫描弹出框是否存在,总时长是60s,存在就继续执行之后代码
        WebDriverWait(browser, 60, 2).until(EC.alert_is_present())
        # 处理弹出alert框
        alert = browser.switch_to.alert
        alert.accept()
    finally:
        browser.close()
        # browser.quit()
 
 
if __name__ == '__main__':
    ui_auto_operation()

使用 XML HTTP REQUEST 实现上传

Selenium + Chrome内核配合 可以实现自动化
具体步骤搜索 selenium Chrome 自动化

没有那么复杂,直接获取网页,然后点击,选择文件,上传!

这个可以用python 加 selenium。

不需要想那么复杂

这个确实不难,就是模拟键鼠操作

在网页地址后附加“?”表示填入数据

通过前端把文件传给后端,后端再读取文件里面的内容,然后再传给前端,前端放入格子里面。结合你自己的需求,再去网上查找一下资料,自己做出来还能达到学习的效果

使用python文件内容可以直接读取为content,使用python selenium chromedriver 实现自动化操作chrome浏览器填写指定内容content即可

https://download.csdn.net/download/weixin_38702515/12859506?spm=1005.2026.3001.5635&utm_medium=distribute.pc_relevant_ask_down.none-task-download-2~default~OPENSEARCH~Rate-4.pc_feed_download_top3ask&depth_1-utm_source=distribute.pc_relevant_ask_down.none-task-download-2~default~OPENSEARCH~Rate-4.pc_feed_download_top3ask

js可以实现你的这个需求,写网页建议使用js