使用selenium.webdriver操作无头模式--haedless浏览器上传文件

第一种情况

Selenium 官方文档的方法:文件上传 | Selenium

from selenium import webdriver
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver.implicitly_wait(10)
driver.get("https://the-internet.herokuapp.com/upload");
driver.find_element(By.ID,"file-upload").send_keys("selenium-snapshot.jpg")
driver.find_element(By.ID,"file-submit").submit()
if(driver.page_source.find("File Uploaded!")):
    print("file upload success")
else:
    print("file upload not successful")
driver.quit()

这种方法对于input格式的文件上传格式适用,只要定位到file-upload的input框,然后 send_keys 输入文件路径,click上传即可。

第二种情况:

对点击上传后弹出windows窗口的文件上传,如果是在wiindow上运行的程序可采用autoit或者robot的方法,但是想在linux上采用无头浏览器上传文件显然不行,因为没有UI界面

先说结论,目前没有直接的方法,转换思路

我采用的是先登录系统,然后拿到token后,使用curl 带token参数上传文件,在linux上非常好用,前提是需要利用浏览器F12找到文件上传的接口。

代码如下:

def upload_log(file_path):
    '''上传日志文件到 Reportportal'''
    # 模拟superadmin用户登录,获取token
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')   # 采用无头模式
    chrome_options.add_argument('--no-sandbox')
    driver = webdriver.Chrome('/usr/bin/chromedriver', chrome_options=chrome_options)
    driver.get('http://10.8.8.9:8080/ui/#login')
    driver.find_element_by_name('login').send_keys('admin')
    driver.find_element_by_name('password').send_keys('admin')
    driver.find_element_by_xpath('//button[contains(text(), "Login")]').click()
    time.sleep(5)
    token = driver.execute_script('return localStorage.getItem("token");')
    token_type = token[0]['type']
    token_value = token[1]['value']

    # 上传文件
    Rpurl = "http://10.8.8.9:8080/api/v1/superadmin_personal/launch/import"
    command = 'curl -H "Accept: application/json" -H "Authorization: %s %s" -F "file=@%s" -X POST "%s"' % (token_type, token_value, file_path, Rpurl)
    p = os.popen(command).readlines()
    print(p)
    if 'successfully imported' in p[0]:
        print('日志已上传网站')
    else:
        print('日志上传失败')
    driver.close()

  

 

posted @ 2023-01-30 15:33  LastOneBlackHole  阅读(489)  评论(0编辑  收藏  举报