find_element_by_xpath не работает, когда я автоматизирую загрузку csv

#selenium-webdriver

#selenium-webdriver

Вопрос:

Я пытаюсь автоматизировать загрузку файла из базы данных, используя selenium на python. Я нахожу xpath, щелкая правой кнопкой мыши на кнопке, а затем копирую xpath. В моем коде на python я использовал find_element_by_xpath после открытия веб-сайта с помощью chromedriver. Но он вернул пустой список, но не элемент. Эта проблема сводила меня с ума. Кто-нибудь сталкивался с этой проблемой?

Вот код:

 import time 
from selenium import webdriver
from selenium.webdriver.chrome.option import Options
def test_sanity():
    options = Options()
    options.add_argument("--disable-infobars")
    browser = webdriver.Chrome() _= 
    browser.get("ebi.ac.uk/chembl/g/#browse/activities/filter/…) 
    download = browser.find_elements_by_xpath(""".//*[@id="GladosMainContent"]/div/div/div[1]/div[2]/div[1]/div[3]/div/a[1]""") 
    print(download) 
    time.sleep(3)
  

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

1. время импорта из selenium импортируйте webdriver из selenium. webdriver.chrome.options Параметры импорта def test_sanity(): параметры = Options() параметры.add_argument («—disable-информационные панели») браузер = webdriver. Chrome() _= browser.get(» ebi.ac.uk/chembl/g/#browse/activities/filter / … ) загрузить = browser.find_elements_by_xpath(«»».//*[@id=»GladosMainContent»]/div/div/div[1]/div[2]/div[1]/div[3]/div/a[1]»»» ) время печати (загрузки).sleep (3)

2. find_elements_by_xpath возвращает пустой список, и когда я использовал find_element_by_xpath, я столкнулся с этим no such element: Не удается найти элемент: {«метод»: «xpa …}. есть новые идеи?

3. Кстати, я нашел XPath, щелкнув правой кнопкой мыши в Chrome, затем «Проверить»> «Копировать»> «Копировать XPath».

4. О, извините, что отнял у вас время. Я думал, что включил весь URL: ebi.ac.uk/chembl/g/#browse/activities/filter/… . Кнопка загрузки «csv» находится в правом верхнем углу веб-сайта. (не совсем верхний).

5. Я действительно ценю вашу помощь. Кажется, вы эксперт в Selenium. Итак, это сложно для вас, тогда я бы продолжил и оставил эту проблему в глубине моего сознания.

Ответ №1:

Вам нужно подождать, пока страница не загрузится полностью, чтобы взаимодействовать с CSV кнопкой. Это полностью проблема синхронизации. Ниже приведен скрипт с синхронизацией.

необходим импорт:

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

скрипт:

 url = "https://www.ebi.ac.uk/chembl/g/#browse/activities/filter/target_chembl_id:CHEMBL5455"
wait = WebDriverWait(driver, 10)
# navigate to application
driver.get(url)
# wait for the CSV Link and then click
csvLink = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR, "[data-format='CSV']")))
csvLink.click()
# wait for the download link and click
hereLink = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,".BCK-download-messages-container .BCK-download-link-container a")))
hereLink.click()
# wait for 10 seconds for the downloading to finish
time.sleep(10) # check if there is another option available to make sure if the download is completed, otherwise use this hard coded wait.
  

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

1. Ссылка «здесь» все еще была там. Но веб-сайт будет закрыт программой python, если я не позволю ему дождаться завершения загрузки после нажатия кнопки «здесь».

2. Спасибо за ваше напоминание. Я принял ответ.