Python + Selenium选择问题

时间:2018-11-28 13:38:19

标签: python selenium selenium-webdriver

感谢上一个问题,它是@QHarr和@DebanjanB的帮助,

这个简单易用,源于我是一个初学者。

我需要从webauto.de的这段代码中抓取图像位置,然后点击图库

<li class="slide" style="">
    <img class="image" src="https://www.webauto.de/img/vc/de/0/1/2/19482/pan/1735h_1" style="max-width: 640px; max-height: 480px; width: 100%; height: auto; left: 50%; top: 50%; margin-left: -320px; margin-top: -240px;" alt=""></li>

还有一个

find_elements_by_css_selector('.slide > img')
find_elements_by_css_selector('li > img')
find_elements_by_xpath("//li[@class='slide']/img]"

让我留下一个空白列表,而不是地址列表。

第二件事是我需要从hasznaltauto.hu的JS下拉列表中选择一个子组

<select id="hirdetesszemelyautosearch-modell_id" class="form-control hidegroups" name="HirdetesSzemelyautoSearch[modell_id]" data-live-search="false" data-header="Modell" data-krajee-depdrop="depdrop_fdcef640" disabled="disabled">
    <optgroup label="FIESTA">
        <option value="540" class="opt">FIESTA (1001)</option></optgroup>

我使用了提供给我的东西的逻辑延续,但是它抛出了“元组索引超出范围”

find_element_by_xpath("//select[@id='hirdetesszemelyautosearch-modell_id']/optgroup[@label='{}']/option[contains(text(), '{}')]".format('FIESTA')).click()

2 个答案:

答案 0 :(得分:1)

您可以使用CSS选择器来获取所有图像链接。我不确定您所说的地址是什么意思,但是已经使用类选择器在画廊下获取地址。

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

d = webdriver.Chrome()
d.get("https://www.webauto.de/site/de/auto-detail/v-id/121078258-1/fahrzeug/FORD-Fiesta-Style-1,3l-44kW-5-Gang-!-Nur-an-Gewerbe/Export-!-/Gebrauchtwagen/Limousine/silber/Benzin/44-KW-60-PS/Wesseling")
elements = WebDriverWait(d,5).until(EC.visibility_of_all_elements_located((By.CSS_SELECTOR, "[src^='https://www.webauto.de/img/']")))
linkList = [element.get_attribute('src') for element in elements]
print(linkList)
print(d.find_element_by_css_selector('.contactdata').text)

#d.quit()

答案 1 :(得分:1)

对于完整尺寸的图像,您需要将其提取到iframe中

iframe = WebDriverWait(driver, 15).until(EC.presence_of_element_located((By.ID, "sb-player")))
driver.switch_to.frame(iframe)
images = driver.find_elements_by_css_selector('.slide > img')