首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >获取页面源上的元素,但无法使用xpath定位

获取页面源上的元素,但无法使用xpath定位
EN

Stack Overflow用户
提问于 2021-09-26 20:29:09
回答 2查看 267关注 0票数 2

我试图使用xpath查找元素,但它们无法找到。当我使用selenium获取页面源时,它们有元素,我也检查过,但是元素不在Iframe中。

这是我的代码:

代码语言:javascript
复制
from requests_html import HTMLSession
import pandas as pd
from fake_useragent import UserAgent
from requests_html import AsyncHTMLSession
from selenium import webdriver
from shutil import which
import time
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.by import By
from selenium.common.exceptions import TimeoutException
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys

ua = UserAgent()
s = HTMLSession()
asession = AsyncHTMLSession()

url = 'https://ordiamond-frame-categoryembed-catid23621.jewelershowcase.com/search/results?query=124405'
try : User_Agent = str(ua.chrome)
except : pass 
headers = {'User-Agent':User_Agent}
response = s.get(url, headers= headers)
print(response)

link = response.html.xpath('//a[@class="image logClick containerFix"]/@href')

if link:

    p_url = "https://ordiamond-frame-categoryembed-catid23621.jewelershowcase.com" + (link[0])
    chrome_path = which('chromedriver')
    driver = webdriver.Chrome(executable_path=chrome_path)
    driver.maximize_window()
    driver.get(p_url)
    time.sleep(20)
    with open('data.html', 'w') as file:
        file.write(str(driver.page_source))
    print(driver.page_source)
    driver.page_source
    WebDriverWait(driver, 50).until(EC.visibility_of_element_located((By.XPATH, '(//h3[@class="description"])[2]')))

    # time.sleep(16)
    na = driver.find_element_by_xpath('(//h3[@class="description"])[2]')
    print(na.text)

希望能找到解决办法。谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-09-27 06:55:50

如果存在多个匹配节点,如果使用的是find_element而不是find_elements,Selenium将始终获取第一个集合。webdriverwait也是如此。

代码语言:javascript
复制
driver = webdriver.Chrome(driver_path)
driver.maximize_window()
driver.implicitly_wait(30)
wait = WebDriverWait(driver, 30)
driver.get("https://ordiamond-frame-categoryembed-catid23621.jewelershowcase.com/search/results?query=124405")
product = WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//div[@id='results']/descendant::a")))
product.click()
heading = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//h3[@class='description']")))
print(heading.text)

导入:

代码语言:javascript
复制
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC4

输出:

代码语言:javascript
复制
14K Yellow 9x7 mm Oval Engagement Ring Mounting
票数 1
EN

Stack Overflow用户

发布于 2021-09-27 04:32:44

考虑这样一个事实,您需要环的链接的xpath,如下所示:

代码语言:javascript
复制
link = response.html.xpath('//*[@id='results']//a[1]')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69338711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档