Для l oop продолжает перебирать первый кусок данных в списке - PullRequest
0 голосов
/ 20 апреля 2020

Этот код очищает таблицу HTML от https://www.asx.com.au/asx/statistics/prevBusDayAnns.do и загружает файлы PDF для указанных c кодов и заголовков ASX. Когда for for l oop выполняет итерацию по кодам ASX, найденным в «data», он выполняет итерацию по первому коду ASX пять раз, что создает пять дубликатов одного и того же PDF. Например, в приведенном ниже коде будет пять копий TWD. Количество итераций для l oop в первом коде ASX равно количеству кодов ASX в «данных». Например, если бы было десять кодов, я бы получил десять копий PDF-файлов для TWD. Это происходит только с первым кодом ASX, все остальное в порядке. Любая причина, почему это происходит?

Соответствующий код:

driver.get("https://www.asx.com.au/asx/statistics/prevBusDayAnns.do")
data = ['TWD', 'GEM', 'AT1','TKF','GDF']
asxcodes = []
for d in data:
    try:
       asxcode = driver.find_element_by_xpath("//table//tr//td[text()='{}']/following-sibling::td[3]/a[contains(.,'{}')]".format(d,"Becoming a substantial holder")).get_attribute("href")
       asxcodes.append(asxcode)
    except:
        pass

Весь код:

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,"download.default_directory" : r"C:\Users\Harrison Pollock\Desktop\The Smarts\Becoming a Substantial Holder"}
chromeOptions.add_experimental_option("prefs",prefs)
chromedriver = r"C:\Users\Harrison Pollock\Downloads\Python\chromedriver_win32\chromedriver.exe"
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")
data = ['TWD', 'GEM', 'AT1','TKF','GDF'
asxcodes = []
for d in data:
    try:
       asxcode = driver.find_element_by_xpath("//table//tr//td[text()='{}']/following-sibling::td[3]/a[contains(.,'{}')]".format(d,"Becoming a substantial holder")).get_attribute("href")
       asxcodes.append(asxcode)
    except:
        pass
for asxcode in asxcodes:
    driver.get(asxcode)
    WebDriverWait(driver, 15).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Agree and proceed']"))).click()
    time.sleep(10)  

1 Ответ

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

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

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,"download.default_directory" : r"C:\Users\Harrison Pollock\Desktop\The Smarts\Becoming a Substantial Holder"}
chromeOptions.add_experimental_option("prefs",prefs)
chromedriver = r"C:\Users\Harrison Pollock\Downloads\Python\chromedriver_win32\chromedriver.exe"
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")
data = ['TWD', 'GEM', 'AT1','TKF','GDF']
asxcodes = []
for d in data:
    try:
       driver.find_element_by_xpath("//table//tr//td[text()='{}']/following-sibling::td[3]/a[contains(.,'{}')]".format(d,"Becoming a substantial holder")).click()
       WebDriverWait(driver,5).until(EC.number_of_windows_to_be(2))
       driver.switch_to.window(driver.window_handles[-1])
       WebDriverWait(driver,5).until(EC.element_to_be_clickable((By.XPATH, "//input[@value='Agree and proceed']"))).click()
       time.sleep(10)
       driver.close()
       driver.switch_to.window(driver.window_handles[-1])
    except:
        driver.switch_to.window(driver.window_handles[-1])
        continue

Надеюсь, этот лог c поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...