4 回答
TA贡献1827条经验 获得超8个赞
要提取src
图像的属性,您需要为 引入WebDriverWait,visibility_of_element_located()
您可以使用以下任一 定位器策略:
使用CSS_SELECTOR:
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--headless')
options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get('https://www.sky.com/tv-guide/20200605/4101-1/107/Efe2-364')
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.o-layout__item div.c-bezel.programme-content__image>img"))).get_attribute("src"))
使用XPATH:
options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches", ["enable-automation"])
options.add_experimental_option('useAutomationExtension', False)
options.add_argument('--headless')
options.add_argument('--window-size=1920,1080')
driver = webdriver.Chrome(options=options, executable_path=r'C:\WebDrivers\chromedriver.exe')
driver.get('https://www.sky.com/tv-guide/20200605/4101-1/107/Efe2-364')
print(WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='o-layout__item']//div[@class='c-bezel programme-content__image']/img"))).get_attribute("src"))
控制台输出:
https://images.metadata.sky.com/pd-image/251eeec2-acb3-4733-891b-60f10f2cc28c/16-9/640
注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
TA贡献1712条经验 获得超3个赞
你有正确的xpath,但不要使用绝对路径,它很容易被改变。试试这个亲戚xpath://div[@class="c-bezel programme-content__image"]//img。
为了实现你的意思,请.get_attribute("src")不要使用.text
driver.get('https://www.sky.com/tv-guide/20200605/4101-1/107/Efe2-364')
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, '//div[@class="c-bezel programme-content__image"]//img')))
print(element.get_attribute("src"))
driver.quit()
或者更好的方法,使用 css 选择器。这应该更快:
element = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, '.c-bezel.programme-content__image > img')))
参考:https ://selenium-python.readthedocs.io/locating-elements.html
TA贡献1796条经验 获得超7个赞
您的 xpath 似乎是正确的。您无法定位,因为您忘记处理 cookie。自己试试吧。将驱动程序搁置几秒钟,然后单击同意所有 cookie。然后你会看到你的元素。有多种方式来处理cookie。我能够通过使用我自己的更干净的 xpath 来找到 xpath。我从最近的父母那里访问那个元素。
TA贡献1802条经验 获得超5个赞
如果您在无头模式下工作,通常增加窗口大小是个好主意。将此行添加到您的选项中:
chrome_options.add_argument('window-size=1920x1080')
添加回答
举报