#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. Спасибо за ваше напоминание. Я принял ответ.