如何使用 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>
要单击选项卡,您需要引入 WebDriverWait
和 element_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
浏览器快照:
我会点击那个红圈里的按钮。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>
要单击选项卡,您需要引入 WebDriverWait
和 element_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
浏览器快照: