如何使用 Selenium Webdriver 和 Python 单击选项卡按钮

How to click on the tab button using Selenium Webdriver and Python

我会点击那个红圈里的按钮。enter image description here

我想抓取该网站。 如何编写 python 代码?

我试过这段代码

from bs4 import BeautifulSoup
from urllib.request import urlopen
import time
from selenium import webdriver 
driver = webdriver.Chrome('./chromedriver.exe')
url_base = 'https://www.kebhana.com/cont/mall/mall08/mall0805/index.jsp?_menuNo=62608'
driver.implicitly_wait(5)

driver.get(url_base)
openElement = driver.findElement(By.linkText("li[2]")).click(); 


time.sleep(2)

openElement.click()
time.sleep(5)


driver.quit()
soup

错误信息是这样出现的:

AttributeError                            Traceback (most recent call last)
<ipython-input-16-19b58965022a> in <module>()
      8 
      9 driver.get(url_base)
---> 10 openElement = driver.findElement(By.linkText("li[2]")).click();
     11 
     12 

AttributeError: 'WebDriver' object has no attribute 'findElement'

那个按钮的 html 代码是

<li class="on">
   <a href="#none" onclick="javascript:doTab('spb_2812');">
      <span>적 금</span>
   </a>
</li>

要单击选项卡,您需要引入 WebDriverWaitelement_to_be_clickable() 并使用下面的 xapth。

from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium import webdriver

driver=webdriver.Chrome('./chromedriver.exe')
driver.get("https://www.kebhana.com/cont/mall/mall08/mall0805/index.jsp?_menuNo=62608")
WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@class='productSDiv']//li//a[contains(@onclick,'spb_2812')]"))).click()

findElement 是 Java 语法,而不是 Python。此外,li 是一个标签,而不是文本,并且 by_link_text 无论如何都不适用于 <span> 标签。

改用xpath

driver.find_element_by_xpath('//li[.//span[.="적 금"]]')

您需要处理几件事:

  • 当您使用 Selenium-Python 客户端时,findElement() 不是有效的代码行。相反,您需要使用以下任一方法:

    • find_element_by_xpath()
    • find_element_by_css_selector()
  • linkText 仅接受 text 仅。

  • 诱导 time.sleep(5) 会降低 测试执行 性能。

解决方案

To click() 在文本为 적 금 的元素上,你必须引入 WebDriverWait element_to_be_clickable() 并且您可以使用以下任一项 :

  • CSS_SELECTOR:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "ul.productSearchDiv li:nth-child(2) >a>span"))).click()
    
  • XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//ul[@class='productSearchDiv ']//li/a/span[text()='적 금']"))).click()
    
  • 注意:您必须添加以下导入:

    from selenium.webdriver.support.ui import WebDriverWait
    from selenium.webdriver.common.by import By
    from selenium.webdriver.support import expected_conditions as EC
    
  • 浏览器快照: