#python #selenium #selenium-webdriver #selenium-chromedriver
Вопрос:
Я хотел бы очистить веб-сайт gate.io, Я хотел бы иметь список всех монет/токенов в левой таблице, чтобы нажать на каждую и для каждой получить соотношение длинных/коротких, показанное справа на странице. Проблема в том, что я не могу получить список монет/жетонов из таблицы. Вот что я сделал:
!pip install selenium
!apt-get update
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
import sys
import logging
from selenium.webdriver.remote.remote_connection import LOGGER
LOGGER.setLevel(logging.WARNING)
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
from selenium import webdriver
from tqdm import tqdm_notebook as tqdm
import pandas
import json
import pprint
chrome_options = webdriver.ChromeOptions()
chrome_options.add_argument('--headless')
chrome_options.add_argument('--no-sandbox')
chrome_options.add_argument('--disable-dev-shm-usage')
chrome_options.add_argument("user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/90.0.4430.212 Safari/537.36")
wd = webdriver.Chrome('chromedriver',chrome_options=chrome_options)
wd.get("https://www.gate.io/en/trade/BTC_USDT")
table = wd.find_element_by_xpath("//*[@id='marketlist_usdt']")
rows = table.find_elements_by_xpath("tbody/tr[@class=' border-box']")
for row in rows: print( row.get_attribute("id") )
Ответ №1:
Похоже, ваш путь к элементу неверен: путь к элементу 1 путь
к элементу 2
попробуйте использовать find_element_by_css_selector
, это сработало для меня:
from selenium import webdriver
chrome = webdriver.Chrome(executable_path='MY_PATH')
chrome.get("https://www.gate.io/en/trade/BTC_USDT")
class Ask:
def __init__(self, driver):
self.driver = driver
def __repr__(self):
return f'{self.price} | {self.volume} | {self.total}'
@property
def price(self):
return self.driver.find_element_by_css_selector('span.price ').text
@property
def volume(self):
return self.driver.find_element_by_css_selector('span.volume').text
@property
def total(self):
return self.driver.find_element_by_css_selector('span.total').text
ask_list = [Ask(a) for a in chrome.find_elements_by_css_selector('ul#ul-ask-list li')]
for a in ask_list:
print(a)