如何通过XPath在Selenium中使用@FindAll和@FindBy进行Web刮擦



网站

我用这种方法来清除元素

name = driver.find_elements(By.XPATH, '//div[@class="p-name p-name-type-2"]/a/em/font[3]/font')

但当我想要内部产品的详细信息时,我必须移动到该项目页面(单一产品页面(

那么我只访问该项目数据,但我想废弃所有项目数据。它给出了一项数据,但我想要该项的所有数据。

所有产品的外部细节(我知道如何报废(用箭头。但不知道如何废弃图片2中显示的所有项目的内部细节(下一个链接(

我想通过xpath 取消这些由红色箭头指示的细节

要抓取产品的内部数据,您必须逐个点击它们,然后它将在一个新的选项卡中打开,因此您必须切换到一个新选项卡,然后您应该能够抓取它。

代码:

driver.maximize_window()
wait = WebDriverWait(driver, 20)
driver.get("https://search.jd.com/Search?keyword=两件套套装裙&enc=utf-8&wq=两件套套装裙&pvid=c35452079d6240b3a5fab6c585b53856")
all_products = wait.until(EC.presence_of_all_elements_located((By.XPATH, "//img[@data-img and not(@data-url) and @height='220']")))
print(len(all_products))
i= 1
for product in all_products:
prd = wait.until(EC.visibility_of_element_located((By.XPATH, f"(//img[@data-img and not(@data-url) and @height='220'])[{i}]")))
driver.execute_script("arguments[0].scrollIntoView(true);", prd)
prd.click()
all_handles = driver.window_handles
driver.switch_to.window(all_handles[1])
print(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.sku-name"))).get_attribute('innerText'))
print(wait.until(EC.visibility_of_element_located((By.CSS_SELECTOR, "span.p-price"))).text)
driver.close()
driver.switch_to.window(all_handles[0])
i = i + 1

进口:

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

网站响应很慢,所以我无法运行整个执行过程。但是,上面的代码在您所在的地区应该可以正常工作。

此外,Stackoverflow不允许我发布输出,因为它包含一些特殊的字符。请查看输出的注释。

最新更新