I try to click on the more element on these pages – with the following code
for the following link this works fine with finding element per xpath:
import os, sys, time from selenium import webdriver from selenium.webdriver.chrome.options import Options from sys import platform WAIT = 1 link = "https://apps.apple.com/us/app/daily-budget-original/id651896614?uo=4" path = os.path.abspath (os.path.dirname (sys.argv[0])) if platform == "win32": cd = '/chromedriver.exe' elif platform == "linux": cd = '/chromedriver' elif platform == "darwin": cd = '/chromedriver' options = Options() options.add_argument("--window-size=1920x1080") options.add_argument('--no-sandbox') options.add_argument('--disable-gpu') options.add_experimental_option ('excludeSwitches', ['enable-logging']) # options.add_argument('--headless') driver = webdriver.Chrome (path + cd, options=options) driver.get (link) # Read link time.sleep (WAIT) # Wait till the full site is loaded driver.find_element_by_xpath('//*[@id="ember-app"]/div/main/div[2]/section[7]/div[1]/dl/div[9]/dd/ol/div/button').click()
But when i try the same code with another link / app like https://apps.apple.com/us/app/contacts-backup-pro-restore/id1120943403?uo=4 the more-element is not opening anymore
I saw that the xpath is slightly different so i tried it with
driver.find_element_by_xpath('//*[@id="ember-app"]/div/main/div[2]/section[9]/div[1]/dl/div[9]/dd/ol/div/button').click()
but this isn´t working
then i tried it with class-selector instead with
driver.findElement(By.cssSelector("button[class='we-truncate__button we-truncate__button--top-offset link']")).click()
but this isn´t working for both links now…
Is there anyway to get both links running – in the best case with css-selectors?
Advertisement
Answer
Yes you can use the below xpath
:
//dt[text()='In-App Purchases']/following-sibling::dd/descendant::button
this should click on more on the both pages.
Xpath is basically looking for In-App Purchases
and then the following button which is part of it, so you can use on any app store web page
and you can click it like this :
wait = WebDriverWait(driver, 10) in_app_more_button = wait.until(EC.element_to_be_clickable((By.XPATH, "//dt[text()='In-App Purchases']/following-sibling::dd/descendant::button"))) in_app_more_button.click()
Imports :
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC