【问题标题】:I can't find how to get text with selenium python [duplicate]我找不到如何使用 selenium python 获取文本 [重复]
【发布时间】:2019-12-16 09:02:42
【问题描述】:

我尝试获取的内容

<span class="noactive">0&nbsp;Jours restants</span>

(这是保修的到期日期) 但我不知道如何获取(我需要将其打印到文件中)

我的代码

def scrapper_lenovo(file, line):
   CHROME_PATH = 'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
   CHROMEDRIVER_PATH = 'C:\webdriver\chromedriver'
   WINDOW_SIZE = "1920,1080"
   chrome_options = Options()  
   chrome_options.add_argument("--headless")
   chrome_options.add_argument("--window-size=%s" % WINDOW_SIZE)
   chrome_options.binary_location = CHROME_PATH
   d = driver.Chrome(executable_path=CHROMEDRIVER_PATH,
                          chrome_options=chrome_options)  
   d.get("https://pcsupport.lenovo.com/fr/fr/warrantylookup")
   search_bar = d.find_element_by_xpath('//*[@id="input_sn"]')
   search_bar.send_keys(line[19])
   search_bar.send_keys(Keys.RETURN)
   time.sleep(4)
   try:
      warrant = d.find_element_by_xpath('//*[@id="W-Warranties"]/section/div/div/div[1]/div[1]/div[1]/p[1]/span')
      file.write(warrant)
   except:
      print ("test")
      pass
   if ("In Warranty" not in d.page_source):
    file.write(line[3])
    file.write("\n")
   d.close()

如您所见,我尝试打印“保证”的内容,但我找不到任何允许它的功能(我看到一些使用 .text()、.gettext() 但无论出于何种原因我都无法获得他们工作)。

【问题讨论】:

  • 你试过warrant.getAttribute(“innerHTML”)吗?
  • 只使用warrant.text
  • 我尝试了这个页面中的内容,但我无法让它工作,也许我错过了包含或错误地使用了 text/gettext

标签: python-3.x selenium web


【解决方案1】:

您可以尝试显式匹配所需的标签,the relevant XPath expression 将是:

//span[@class='noactive']

我还建议使用这个time.sleep() 函数,它是某种形式的性能反模式,如果您需要等待某个元素的存在/可见性/不可见性/不存在,您应该选择Explicit Wait

所以删除这些行:

time.sleep(4)
warrant = d.find_element_by_xpath('//*[@id="W-Warranties"]/section/div/div/div[1]/div[1]/div[1]/p[1]/span')

改用这个:

warrant = WebDriverWait(driver, 10).until(expected_conditions.presence_of_element_located((By.XPATH, "//span[@class='noactive']")))

更多信息:How to use Selenium to test web applications using AJAX technology

【讨论】:

  • 存在只是元素在DOM中但不一定可见。如果要提取文本,则元素需要可见,因此您需要visibility_of_element_located。此外,OP 想要元素中的文本,因此您需要添加 .text
猜你喜欢
  • 2019-03-08
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2014-01-26
  • 2023-03-30
  • 2020-12-22
  • 1970-01-01
相关资源
最近更新 更多