#python #selenium #bscscan
Вопрос:
Я пытаюсь извлечь данные из bscscan. Мой код представлен ниже.
Я продолжаю получать исключение тайм-аута. Однако после удаления этой строки:
driver.find_element_by_xpath('/html/body/div[4]/table/thead/tr/th[2]/a').click()
проблема больше не возникает. У кого — нибудь есть идеи, как это решить? Пожалуйста, обратите внимание, что мне нужно нажать AGE
кнопку перед экспортом данных в csv.
from selenium import webdriver
import pandas as pd
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
PATH = 'C:/Users/XX/Downloads/chromedriver_win32/chromedriver.exe'
driver = webdriver.Chrome(PATH)
driver.maximize_window()
driver.implicitly_wait(30)
driver.get('https://bscscan.com/token/0x20de22029ab63cf9a7cf5feb2b737ca1ee4c82a6#tokenTrade')
print(driver.title)
wait = WebDriverWait(driver, 20)
try:
wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button[id='btnCookie']"))).click()
except:
pass
Txn_Hash = []
Age = []
Maker = []
Taker = []
Price = []
DEX = []
wait.until(EC.frame_to_be_available_and_switch_to_it((By.ID, "dextrackeriframe")))
#wait.until(EC.element_to_be_clickable((By.LINK_TEXT, "Age"))).click()
driver.find_element_by_xpath('/html/body/div[4]/table/thead/tr/th[2]/a').click()
table_size = len(driver.find_elements(By.XPATH, "//thead[@class='thead-light']/following-sibling::tbody//tr"))
print(table_size)
j = 1
for i in range(table_size):
tnx_text = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/descendant::a[1]"))).text
age_text = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[3]"))).text
maker_text = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[4]"))).text
Taker_text = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[6]"))).text
Price_text = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[7]"))).text
DEX_href = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[8]/img"))).get_attribute('src')
Txn_Hash.append(tnx_text)
Age.append(age_text)
Maker.append(maker_text)
Taker.append(Taker_text)
Price.append(Price_text)
DEX.append(DEX_href)
j = j 1
print(Txn_Hash)
print(Age)
print(Maker)
print(Taker)
print(Price)
print(DEX)
data = {
'Transaction_HashKey': Txn_Hash,
'Age': Age,
'Maker': Maker,
'Taker' : Taker,
'Price' :Price,
'DEX' : DEX
}
df = pd.DataFrame.from_dict(data)
df.to_csv('output.csv', index = 0)
Ответ №1:
Вы получаете эту ошибку, потому что следующая строка кода ничего не возвращает.
wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[3]")))
Эта строка кода действительна, если вы не нажмете AGE
кнопку, но после выполнения действия щелчка ничего не возвращается. Кроме того, вам не хватает span
тега.
Замените приведенную выше строку кода следующей:
age_text = wait.until(EC.visibility_of_element_located((By.XPATH, f"//th[contains(text(),'Txn Hash')]/ancestor::thead/following-sibling::tbody/tr[{j}]/td[2]/span"))).text