Как выбрать элемент, используя синтаксис XPATH на Selenium для Python?
рассмотрим следующий HTML:
<div id='a'>
<div>
<a class='click'>abc</a>
</div>
</div>
Я хочу щелкнуть abc, но div обертки может измениться, поэтому
driver.get_element_by_xpath("//div[@id='a']/div/a[@class='click']")
не то, что я хочу
Я попытался:
driver.get_element_by_xpath("//div[@id='a']").get_element_by_xpath(.//a[@class='click']")
но это не будет работать с более глубоким вложением
любые идеи?
Ответы
Ответ 1
HTML
<div id='a'>
<div>
<a class='click'>abc</a>
</div>
</div>
Вы можете использовать XPATH как:
//div[@id='a']//a[@class='click']
выход
<a class="click">abc</a>
Тем не менее, ваш код Python должен быть следующим:
driver.find_element_by_xpath("//div[@id='a']//a[@class='click']")
Ответ 2
Посмотрите этот блог Мартина Тома. Я протестировал приведенный ниже код на MacOS Mojave, и он работал как указано.
> def get_browser():
> """Get the browser (a "driver")."""
> # find the path with 'which chromedriver'
> path_to_chromedriver = ('/home/moose/GitHub/algorithms/scraping/'
> 'venv/bin/chromedriver')
> download_dir = "/home/moose/selenium-download/"
> print("Is directory: {}".format(os.path.isdir(download_dir)))
>
> from selenium.webdriver.chrome.options import Options
> chrome_options = Options()
> chrome_options.add_experimental_option('prefs', {
> "plugins.plugins_list": [{"enabled": False,
> "name": "Chrome PDF Viewer"}],
> "download": {
> "prompt_for_download": False,
> "default_directory": download_dir
> }
> })
>
> browser = webdriver.Chrome(path_to_chromedriver,
> chrome_options=chrome_options)
> return browser