Как я могу соскрести текст с расположенного элемента, используя Selenium и Python - PullRequest
0 голосов
/ 05 мая 2019

Я пытаюсь запустить следующий код

from selenium import webdriver
from selenium.webdriver.chrome.options import Options
import time
options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(options=options)
driver.get('https://theunderminejournal.com/#eu/draenor/battlepet/1155')
time.sleep(20) #bypass cloudflare
price = driver.find_element_by_xpath('//*[@id="battlepet-page"]/div[1]/table/tr[3]/td/span')
print (price) 

, чтобы я мог очистить "Текущая цена" со страницы.Но это расположение xpath не будет возвращать текстовое значение (в конце я также попробовал «текстовый» вариант без успеха.

заранее спасибо за любой ответ

Ответы [ 3 ]

2 голосов
/ 05 мая 2019

Во-первых, используйте WebdriverWait для ожидания элемента вместо сна.

Во-вторых, ваш локатор не находит элемент.

Попробуйте это,

driver.get('https://theunderminejournal.com/#eu/draenor/battlepet/1155')
price = WebDriverWait(driver,30).until(EC.visibility_of_element_located((By.XPATH,"//div[@id='battlepet-page']/div/table/tr[@class='current-price']/td/span")))

print(price.text)

Чтобы использовать ожидание, импортируйте следующее,

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
1 голос
/ 05 мая 2019

Чтобы очистить значение Текущая цена с веб-страницы , вам нужно вызвать WebDriverWait для visibility_of_element_located(), и вы можете использовать любую из следующих Стратегий локатора :

  • Использование CSS_SELECTOR:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "tr.current-price td>span"))).text)
    
  • Использование XPATH:

    print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//th[text()='Current Price']//following::td[1]/span"))).text)
    
  • Примечание : Вы должны добавить следующий импорт:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
1 голос
/ 05 мая 2019

Вы должны дождаться видимости элемента, прежде чем получать текст. Проверьте WebDriverWait в примере ниже:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as ec
from selenium.webdriver.support.ui import WebDriverWait
rom selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument("start-maximized")
options.add_argument("disable-infobars")
options.add_argument("--disable-extensions")
driver = webdriver.Chrome(options=options)

wait = WebDriverWait(driver, 20)

driver.get('https://theunderminejournal.com/#eu/draenor/battlepet/1155')
current_price = wait.until(ec.visibility_of_element_located((By.CSS_SELECTOR, ".current-price .price"))).text

print(current_price)
...