使用 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 的解决方案旨在帮助您使用有效字符序列填充<input>
标记,而不管网站执行的验证如何,这超出了此问题的范围.以上是关于使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 和 Selenium 将鼠标悬停在图形上
使用 Python 和 Selenium 将 APK 上传到解释为 URL 的网页
将 PhantomJS 与 Selenium Webdriver 和 Python 一起使用
使用 Selenium 和 python 将文件下载到指定位置