【问题标题】:Python, Selenium. Google Chrome. Web Scraping. How to navigate between 'tabs' in website蟒蛇,硒。谷歌浏览器。网页抓取。如何在网站的“标签”之间导航
【发布时间】:2021-03-23 18:40:14
【问题描述】:

我在 python 中很菜鸟,现在在 Selenium 中构建了一个网络爬虫,它将获取网页上单击的“选项卡”中产品的所有 URL。但是我的代码从第一个“标签”中获取 URL。代码如下。感谢你们。我开始有点沮丧,哈哈。 Screenshot

from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
from lxml import html 


PATH = 'C:\Program Files (x86)\chromedriver.exe'

driver = webdriver.Chrome(PATH)

url = 'https://www.alza.sk/vypredaj-akcia-zlava/e0.htm'

driver.get(url)

driver.find_element_by_xpath('//*[@id="tabs"]/ul/li[2]').click()

links = []

try:
    WebDriverWait(driver, 10).until(
    EC.presence_of_element_located((By.CLASS_NAME, 'blockFilter')))
    link = driver.find_elements_by_xpath("//a[@class='name browsinglink impression-binded']")
    
    for i in link:
        links.append(i.get_attribute('href'))

finally:
    driver.quit()

print(links)

【问题讨论】:

    标签: python selenium xpath


    【解决方案1】:

    选择当前标签:

    current_tab = driver.current_window_handle
    

    在标签之间切换:

    driver.switch_to_window(driver.window_handles[1])
    driver.switch_to.window(driver.window_handles[-1])
    

    假设您的新标签页网址为TAB_URL,您应该尝试:

    from selenium.webdriver.common.action_chains import ActionChains
    action = ActionChains(driver)
    action.key_down(Keys.CONTROL).click(TAB_URL).key_up(Keys.CONTROL).perform() 
    

    另外,li 显然没有 click 事件,你确定你得到的这个元素'//*[@id="tabs"]/ul/li[2]'aria-selected 属性设置为true 或任何这些类:ui-tabs-activeui-state-active?

    如果没有,您应该在此 li 内的 a 标记上调用 click

    那你应该增加WebDriverWaittimeout参数,保证div被加载。

    【讨论】:

    • 您好,谢谢。但这些不是谷歌浏览器中的标签,而是网站中的标签元素。在单击按钮后,我根据我的理解尝试了您的方法,它应该使用 driver.current_window_handle 存储新形成的页面,但它不起作用。它给了我超出范围的错误。
    • 是的,元素有 aria-selected = true。我实际上可以看到驱动程序单击该选项卡并将产品加载到该选项卡中,但是当我尝试使用循环抓取产品的 href 时,它会从第一个选项卡中给我 hrfe,哈哈。我想知道“产品”元素上方是否还有其他元素必须使用 xpath 指定,以便加载正确的 href
    • 你的意思是这样的?它不工作。 try: WebDriverWait(driver, 10).until( EC.presence_of_element_located((By.CLASS_NAME, 'browsingitemcontainer'))) link = driver.find_elements_by_xpath("//a[@class='name browsinglink impression-binded']") for i in link: links.append(i.get_attribute('href')) finally: driver.quit()
    猜你喜欢
    • 2021-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-19
    • 2019-04-06
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多