Как нажать на кнопку вкладки с помощью Selenium Webdriver и Python - PullRequest
0 голосов
/ 23 сентября 2019

Я нажму эту кнопку в красном круге. введите описание изображения здесь

и я хочу сканировать этот сайт.Как мне написать коды 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>

Ответы [ 3 ]

0 голосов
/ 23 сентября 2019

findElement - это синтаксис Java, а не Python.Кроме того, li - это тег, а не текст, и by_link_text не работает с тегами <span>.

Используйте xpath вместо

driver.find_element_by_xpath('//li[.//span[.="적 금"]]')
0 голосов
/ 23 сентября 2019

Вам необходимо позаботиться о нескольких вещах:

  • Поскольку вы используете Selenium-Python клиентов, findElement() не является допустимой строкойкод.Вместо этого вам нужно использовать одно из следующих:

    • find_element_by_xpath()
    • find_element_by_css_selector()
  • linkText принимаеттолько текст * только 1022 *.

  • Индуцирование time.sleep(5) ухудшит производительность Выполнение теста .

Решение

К 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
    
  • Снимок браузера:

kebhana

0 голосов
/ 23 сентября 2019

Чтобы нажать на вкладку, вам нужно вызвать 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()
...