当前位置: 首页 > 知识库问答 >
问题:

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

蔚承天
2023-03-14

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

这是我的代码:

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)

希望能找到解决办法谢谢

共有2个答案

郑松
2023-03-14

考虑到您需要环链接的xpath,这里是:

link = response.html.xpath('//*[@id='results']//a[1]')
蓟和煦
2023-03-14

如果有多个匹配的节点,如果我们使用find_element而不是find_elements,Selenium将始终获取第一组。

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)

进口:

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

输出:

14K Yellow 9x7 mm Oval Engagement Ring Mounting
 类似资料:
  • 嗨,我是一个相当新的硒。可以有人请建议如何定位和元素在iframe asi是得到错误下面。 带有Iframe标记的DOM按钮元素的屏幕截图 以前编写的代码

  • 下面是selenium找不到元素的代码。 但不知何故,它失败了,对我不起作用。它总是给我以下例外情况:过时的元素引用:元素未附加到页面文档 添加了--GetElementStextList的代码 感谢任何帮助。谢谢

  • 我需要获得一个DOM元素的XPath来持久化它,这样我就可以查找该元素。 我已经尝试了这个答案的方法,但是当我用jQuery创建的对象调用该方法时... ...我得到这个错误: 未捕获的TypeError:无法读取未定义(…)的属性“子节点” 我尝试将替换为,将替换为,将替换为,但我收到未定义为函数结果的... 那么,您是否有一个与类似的函数可以使用jQuery呢?

  • 有了下面的XML示例文档,我需要发出一个XPath/XQuery表达式来获取CD元素的每个子元素的元素名。 所以我需要的查询返回标题,艺术家,国家,国家,价格,年份,任何人都可以帮助请?谢谢

  • 我是Selenium WebDriver的新手,使用NetBeans java和Firebug for Firefox获取XPath。问题是,即使某些元素在浏览器中是可见的和可点击的,并且firebug找到了xpath,我仍然得到一个错误“无法定位元素”。问题是,元素不在框架中(没有框架),不在另一个窗口中,它是可见的,可点击的,并且它有清晰的XPath。我用了Wait和thread.sleep,