【问题标题】:How to click on the tab button using Selenium Webdriver and Python如何使用 Selenium Webdriver 和 Python 单击选项卡按钮
【发布时间】:2019-09-23 19:27:52
【问题描述】:

我会点击红圈中的那个按钮。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>

【问题讨论】:

    标签: python selenium xpath css-selectors webdriverwait


    【解决方案1】:

    你需要注意几件事:

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

      • find_element_by_xpath()
      • find_element_by_css_selector()
    • linkText 仅接受文本

    • 引入time.sleep(5) 会降低测试执行的性能。

    解决方案

    要在文本为적 금的元素上click(),您必须为element_to_be_clickable()诱导WebDriverWait,您可以使用以下任一@ 987654321@:

    • 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
      
    • 浏览器快照:

    【讨论】:

      【解决方案2】:

      点击标签需要诱导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()
      

      【讨论】:

      • @fairystarlight : 很高兴为您提供帮助。请点击下方的空心按钮接受答案,这样它就会变成绿色。
      【解决方案3】:

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

      改用xpath

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

      【讨论】:

        猜你喜欢
        • 2020-01-24
        • 1970-01-01
        • 1970-01-01
        • 2017-01-17
        • 1970-01-01
        • 2020-09-04
        • 2019-12-14
        • 1970-01-01
        • 2018-04-30
        相关资源
        最近更新 更多