利用python selenium动态爬取Google play store apks

论文需要对apk进行渗透测试,于是需要批量下载apks,过程可分为两步;用到站点play top appapkcombo

1. 获得包名

怎么获取包名?

界面通过观察 每个apk都有https://play.google.com/store/apps/details?id=de.culture4life.luca 这种形式的链接,id=xxx,xxx就是包名了

我是笨方法将网页拉到底加载完全,inspect element,copy element另存为xml,离线用XPath Query: //div[@class="wXUyZd"]/a/@href 和文本查找匹配处理工具(vscode)获得一连串包名

2. 获得直链

怎么获得直接下载链接?

我没有在play store上找到apk的直链,于是利用第三方平台apkcombo,这里输入包名发送请求,如果存在对应apk,则返回apk下载直链(动态)

python 代码如下:

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

options = webdriver.ChromeOptions()
prefs = {'download.default_directory': 'F:\\andorid_mobile_penetration\\apks', #存储位置
        "download.prompt_for_download": False,
        'profile.default_content_settings.popups': 0,  # 设置为0,禁止弹出窗口
}
options.add_experimental_option('prefs', prefs)

driver = webdriver.Chrome(chrome_options=options) # if chromedirver.exe not in path,指定chromedirver.exe路径, executable_path='C:/path/to/chromedriver.exe'
with open(r"urls.txt") as f, open("apk_links.txt", "w+") as ff:
    packages = f.readlines()
    for package in packages:
        package = package.replace("\n", "")
        link = "https://apkcombo.com/de-de/apk-downloader/?device=&arches=&sdkInt=28&sa=1&lang=en&dpi=480&q=" + package
        driver.get(link)

        try:
            WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.CLASS_NAME, "download-item"))) #等动态链接被输出
        except Exception:
            print(package + " not found")
            continue

        element = driver.find_element_by_xpath(
            '''//*[@id="apkcombo-server-tab"]/div/a''') # 定位直链元素

        apk_name = str(element.text.split("\n")[0].encode("ascii", "ignore")) # 获得apk 名字
        apk_link = element.get_attribute('href') # 获得 apk 链接
        print(apk_name + " : " + apk_link + "\n")

        ff.writelines(apk_name + " : " + apk_link + "\n") # 追加写名字:链接到文件

        
ff.close()
f.close()

driver.quit()

执行后输出如下,接着能用文本工具在处理下:

3. 下载

获得直链之后,可以选择方式进行批量下载,比如IDM添加批量下载任务。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值