Найти по xpath для нескольких тегов тд - PullRequest
0 голосов
/ 17 апреля 2020

Я хотел бы загрузить PDF-файлы с этого сайта https://www.asx.com.au/asx/statistics/prevBusDayAnns.do, если выполнены два условия. Первым условием является то, что «Код ASX» должен соответствовать одному из кодов в списке. Второе условие заключается в том, что «Заголовок» должен соответствовать «Изменению в существенном владении». Мой текущий код находит только по xpath, если 'ASX Code' = 'SPL'.

Пример того, чего я пытаюсь достичь:

data1 = ['SPL', 'WBC', 'AAA']
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//table//tr//td[text()={data1}]/following-sibling::td[3]/a"))).click()

Мой код:

chromeOptions=webdriver.ChromeOptions()
prefs = {"plugins.always_open_pdf_externally": True}
chromeOptions.add_experimental_option("prefs",prefs)
driver=webdriver.Chrome(executable_path=r"C:\Users\Harrison Pollock\Downloads\Python\chromedriver_win32\chromedriver.exe",chrome_options=chromeOptions)
driver.get("https://www.asx.com.au/asx/statistics/prevBusDayAnns.do")
WebDriverWait(driver,20).until(EC.element_to_be_clickable((By.XPATH,"//table//tr//td[text()='SPL']/following-sibling::td[3]/a"))).click()
WebDriverWait(driver,15).until(EC.number_of_windows_to_be(2))
driver.switch_to.window(driver.window_handles[-1])
WebDriverWait(driver,15).until(EC.element_to_be_clickable((By.XPATH,"//input[@value='Agree and proceed']"))).click()

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Мне не удалось найти набор данных с кодом ASX data1 = ['SPL', 'WBC', 'AAA'] на веб-странице в моем местоположении. Однако здесь приведен пример загрузки нескольких кодов ASX в последовательности.

Набор данных : data1 = ['SW1', 'AME', 'BGA','PPT','AMP']

Сохраните href значение в списке, затем выполните итерацию списка и нажмите кнопку "Согласовано", чтобы загрузить файл PDF.

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

chromeOptions=webdriver.ChromeOptions()
prefs = {"plugins.always_open_pdf_externally": True}
chromeOptions.add_experimental_option("prefs",prefs)
driver=webdriver.Chrome(executable_path=r"C:\Users\Harrison Pollock\Downloads\Python\chromedriver_win32\chromedriver.exe",chrome_options=chromeOptions)
driver.get("https://www.asx.com.au/asx/statistics/prevBusDayAnns.do")
data1 = ['SW1', 'AME', 'BGA','PPT','AMP']

pdfUrls=[]
for d in data1:
    try:
       pdfurl=driver.find_element_by_xpath("//table//tr//td[text()='{}']/following-sibling::td[3]/a[contains(.,'{}')]".format(d,"Change in substantial holding")).get_attribute("href")
       pdfUrls.append(pdfurl)
    except:
        print("No ASX code found with Headline Change in substantial holding : " + d)


for pdfurl in pdfUrls:
    driver.get(pdfurl)
    WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Agree and proceed']"))).click()
    time.sleep(10)  # pause to check download
    print("Downloaded pdf file")
0 голосов
/ 17 апреля 2020

Строго говоря, XPath будет:

//table//tr[./td[1][.="SPL" or .="WBC" or .="AAA"] and .//a/text()[1][contains(.,"Change in substantial holding")]]//@href

Рабочий пример (16/04/2020) с другими кодами:

//table//tr[./td[1][.="AME" or .="SW1" or .="WEB"] and .//a/text()[1][contains(.,"Change in substantial holding")]]//@href

In Python:

values = ['SPL', 'WBC', 'AAA']
response.xpath('//table//tr[./td[1][.="' + values[0] + '"] and .//a/text()[1][contains(.,"Change in substantial holding")]]//@href').extract()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...