Очистка данными Selenium из таблицы с прокруткой вниз

#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)