Как загрузить с href после ожидания загрузки сайта с помощью Selenium

#python #html #selenium

#python #HTML #selenium

Вопрос:

Предыстория:

У меня есть немного кода Python Selenium, который ожидает загрузки веб-сайта (у него задержка). Как только веб-сайт будет загружен, я хочу щелкнуть / загрузить ссылку из href.

Python Selenium:

    browser = webdriver.Chrome('C:/full/path/to/chromedriver.exe')

   browser.get(MAIN_WEBSITE   pdf)
   delay = 20 # seconds
   try:
       myElem = WebDriverWait(browser, delay).until(EC.visibility_of_element_located((By.XPATH, "//*[@class='btn-group']")))
       print("Page is ready!")
       # Now the site is loaded - I can download the pdf - but I am stuck!

   except TimeoutException:
       print("Loading took too much time!")
  

HTML-КОД после его загрузки

 <div class="btn-group">
<a type="button" class="btn btn-primary btn-user" onclick="AiD('182030801')" href="/download.pdf?id=182030801amp;amp;h=917901e6659ad5eb53970aecf687b53eamp;amp;u=cacheamp;amp;ext=pdf" target="_blank" style="border-top-left-radius: 3px;border-bottom-left-radius: 3px;">
[...]
</div>
  

Вопрос:

Я хочу, чтобы selenium «щелкнул и загрузил» PDF-файл, связанный со href ссылкой. Как я могу это сделать?

Ссылки:

Что я пробовал — и все еще не могу заставить это работать:

    browser = webdriver.Chrome('C:/full/path/to/chromedriver.exe')
   browser.get(MAIN_WEBSITE   pdf)
   delay = 20 # seconds
   try:
       myElem = WebDriverWait(browser, delay).until(EC.visibility_of_element_located((By.XPATH, "//*[@class='btn-group']")))
       print("Page is ready!")
       # Now the site is loaded - I can download the pdf - but I am stuck!

   except TimeoutException:
       print("Loading took too much time!")

   browser.find_element(By.XPATH, "//div[@class='btn-group']/a").click()  
  

Комментарии:

1. Для Xpath требуется /a и .click() в конце.

2. @arundeepchohan Я понял, что — изменил / обновил код — но все равно не работает : (

3. Возможно, потребуется просто использовать myElem.getAttribute(‘href’) вместо этого в сочетании с driver.current_url.

4. Просто driver.get(driver.current_url myElem.getAttribute(‘href’)) Затем нажмите на ссылку для скачивания после.

5. @arundeepchohan print(myElem.getAttribute('href')) AttributeError: 'WebElement' object has no attribute 'getAttribute' :/

Ответ №1:

Используя что-то вроде этого, чтобы получить ссылку на страницу pdf.

 import urllib

try:
     myElem = WebDriverWait(browser, delay).until(EC.visibility_of_element_located((By.XPATH, "//*[@class='btn-group']/a")))
     urllib.retrieve(driver.current_url myElem.get_attribute('href'))     
except TimeoutException:
   print("Loading took too much time!")
  

Комментарии:

1. Я не думаю, что urllib больше не имеет urlretrieve… он был удален , также я думаю, что будет лучше, если я .click() нажму кнопку….

2. однако .click() имеет действие щелчка.

3. onclick=»AiD(‘182030801’)»

4. Я не могу протестировать, так что попробуйте.