【问题标题】:Scraping Google Play Store BeautifulSoup / Selenium抓取 Google Play 商店 BeautifulSoup / Selenium
【发布时间】:2019-03-15 16:49:39
【问题描述】:

我正在从 Android 商店(Google Play 商店)抓取数据,我想在连接的手机上自动执行下载过程。我正在尝试使用 Selenium 自动单击应用页面中的“安装”按钮,但我无法单击它

这是我的python代码:

from selenium import webdriver
driver=webdriver.Safari()
driver.get("https://play.google.com/store/apps/details? 
             id=com.playdemic.golf.android")


dr_button = driver.find_element_by_xpath("//*[@id='fcxH9b']/div[4]/c-wiz/div/div[2]/div/div[1]/div/c-wiz[1]/c-wiz[1]/div/div[2]/div/div[2]/div/div[2]/div[2]/c-wiz/div/span/button")
dr_button.click()

【问题讨论】:

  • 有什么事情发生吗?您收到错误消息吗?你能在最后显示的行之前加上一个print(dr_button) 并告诉我们结果是什么吗?
  • @mypetlion 没有任何反应。这是 print(dr_button) 的结果:
  • 我认为解析 google 很难
  • 您确定driver 获得了您预期的页面浏览量吗?页面中可能没有安装按钮。这在 Play 商店中似乎特别有可能,因为安装按钮可以根据定价和地区而动态变化。或者点击它会提示您登录。

标签: python selenium beautifulsoup google-play


【解决方案1】:

编辑

我用 Safari 解决了 90% 的问题,我必须先登录这里是我的代码。

driver = webdriver.Safari()
driver.get("https://play.google.com/store/apps/details? 
id=com.king.candycrushsaga")

connexionbutton= "//*[@id='gb_70']"
emailfield= "identifierId"
GoogleAccUser="*****@gmail.com"
GoogleAccPassword="*****"
passwordfield="//*[@id='password']/div[1]/div/div[1]/input"
nextButton = "//*[@id='identifierNext']/content/span"
nextButtonTwo = "//*[@id='passwordNext']/content/span"
appsTabW  = "//*[@id='wrapper']/div[1]/div/ul/li[2]/a/span/span[2]"
appsTab = "//*[@id='wrapper']/div[1]/div/ul/li[2]/a"
installButton = "//*[@id='fcxH9b']/div[4]/c- 
wiz/div/div[2]/div/div[1]/div/c-wiz[1]/c- 
wiz[1]/div/div[2]/div/div[2]/div/div[2]/div[2]/c-wiz/div/span/button"
confirmInstallButton = "//*[@id='purchase-ok-button']/span"
xx = "//*[@id='purchase-cancel-button']"



loginbuttonElement = WebDriverWait(driver,10).until(lambda driver: 
driver.find_element_by_xpath(xpathbutton))
loginbuttonElement.click()

emailFieldElement = WebDriverWait(driver,10).until(lambda driver: 
driver.find_element_by_id(emailfield))
emailFieldElement.clear()
emailFieldElement.send_keys(GoogleAccUser)

nextButtonElement = WebDriverWait(driver,10).until(lambda driver: 
driver.find_element_by_xpath(nextButton))
nextButtonElement.click()

passwordFieldElement = WebDriverWait(driver,10).until(lambda driver: 
driver.find_element_by_xpath(passwordfield))
passwordFieldElement.clear()
passwordFieldElement.send_keys(GoogleAccPassword)

nextButtonElementTwo = WebDriverWait(driver,10).until(lambda driver: 
driver.find_element_by_xpath(nextButtonTwo))
nextButtonElementTwo.click()

 installButtonElement = WebDriverWait(driver,10).until(lambda driver: 
 driver.find_element_by_xpath(installButton))
 installButtonElement.click()

confirmInstallButtonElement = WebDriverWait(driver,50).until(lambda 
 driver: driver.find_element_by_xpath(xx))
 confirmInstallButtonElement.click()

现在的问题是弹出窗口中的安装确认,我无法检测到单击它并下载应用程序的按钮

【讨论】:

    【解决方案2】:

    问题在于 Google 使用元素混淆来防止以恶意方式对其网站进行自动化处理。使用 XPATH,您走在正确的道路上,但是您将不得不手动创建 XPATH... 路径.. 无论如何,这将有助于简化您的代码。你可以这样:

    dr_button = driver.find_element_by_xpath("//button[@aria-label='Install']")
    

    编辑:为了澄清元素混淆,您可以看到所有类名以及其他元素属性都是看似随机的 6 个字符的字母数字字符串。这些字符串可以并且将会间歇性地改变。大多数元素查找都使用了我的元素id's 和classes。

    【讨论】:

    • 感谢您的解释
    【解决方案3】:

    我必须登录,但我可以点击“安装”! :) 试试其他浏览器?

    from selenium import webdriver
    driver=webdriver.Firefox()
    driver.get("https://play.google.com/store/apps/details?id=com.playdemic.golf.android")
    
    
    dr_button = driver.find_element_by_xpath("//*[@id='fcxH9b']/div[4]/c-wiz/div/div[2]/div/div[1]/div/c-wiz[1]/c-wiz[1]/div/div[2]/div/div[2]/div/div[2]/div[2]/c-wiz/div/span/button")
    dr_button.click()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-04
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 2019-04-12
      相关资源
      最近更新 更多