使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页

Posted

技术标签:

【中文标题】使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页【英文标题】:Upload APK with Python and Selenium to web page interpreted as URL 【发布时间】:2020-02-19 10:16:57 【问题描述】:

我想使用 selenium 和 Python上传一个 .apk 文件到卡巴斯基的在线扫描仪。但是,当我使用 selenium 的 send_keys() 方法时,该文件被解释为 URL。

相关的 html 如下所示:

    <div class="container">
      <div class="div-field-home">
        <div class="div-hero-scanner-wrapper">
<!-- ======= -->

          <div class="acenter pdv-1x" id="drop-area">
            <form action="" id="SendForm">
              <div class="d-inline">
                  <div class="tags-inline amiddle file-load-group">
                      <input id="txt-input-01" type="text" class="small" placeholder="Drag-and-drop a file or paste a link here" maxlength="2000" txtvalue="">
                      <a href="#" class="d-inline bt-attach bt-attach-file"><img src="/resources/img/attach.png" class="w-100" ><img src="/resources/img/attach_inactive.png" class="w-100" ></a>
                      <a href="#" class="btn upper small bt-attach-res bt-attach-file">Attach file</a>
                      <a href="#" class="btn upper clr-ff bg-02 small bt-check bt-disable" analytics-event="StartScan.Click">Scan</a>
                  </div>

代码:

kaspersky_base_URL = "https://virusdesk.kaspersky.com/#"

driver = webdriver.Firefox()
driver.get(kaspersky_base_URL)
file = "/home/user/filepath"

driver.implicitly_wait(30)

input = driver.find_element_by_id("txt-input-01")
input.send_keys(file)

driver.implicitly_wait(60)

links = driver.find_elements_by_xpath('//a[contains(@href, "#")]')
for elem in links:
    if 'SCAN' in elem.text:
        elem.click()

我还尝试将输入 type=text 更改为 type=file。它已更改,但相同的错误不断发生。 我认为问题可能在于必须单击文件攻击链接才能将文本解释为文件。但不完全确定。

任何帮助将不胜感激!

【问题讨论】:

【参考方案1】:

看来你已经够近了。要使用Selenium 和python 将.apk 文件上传到Kaspersky's online scanner,您需要为element_to_be_clickable() 诱导WebDriverWait 而:

从本地系统拖放apk 文件或 提供apk url 的链接。

按照提供apk url链接的第二种方法,可以使用以下Locator Strategies之一:

使用CSS_SELECTOR:

driver.get('https://virusdesk.kaspersky.com/#')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input#txt-input-01"))).send_keys("https://drive.google.com/file/d/1ZspxTOnQpqcuvI0rDAkBsB_Y-gRzIEaq/view/GranthamBuild14022020.apk")

使用XPATH:

driver.get('https://virusdesk.kaspersky.com/#')
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@id='txt-input-01']"))).send_keys("https://drive.google.com/file/d/1ZspxTOnQpqcuvI0rDAkBsB_Y-gRzIEaq/view/GranthamBuild14022020.apk")

注意:您必须添加以下导入:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC

浏览器快照:

【讨论】:

感谢您的回答。但是,此解决方案仅扫描 URL,而不扫描文件本身。因此,如果我将它的 url 提供给恶意 apk,它会说该 url 一切正常 - 如果我(手动)上传文件,它会说它包含威胁。 @Ina 这个基于Selenium 的解决方案旨在帮助您使用有效字符序列填充&lt;input&gt; 标记,而不管网站执行的验证如何,这超出了此问题的范围.

以上是关于使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 和 Selenium 将鼠标悬停在图形上

使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页

将 PhantomJS 与 Selenium Webdriver 和 Python 一起使用

使用 Selenium 和 python 将文件下载到指定位置

将 chromedriver 与 selenium/python/ubuntu 一起使用

使用 Selenium Python 将文件上传到 Twitter