Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 硒中的相对选择素?_Python_Selenium_Xpath_Scrapy_Css Selectors - Fatal编程技术网

Python 硒中的相对选择素?

Python 硒中的相对选择素?,python,selenium,xpath,scrapy,css-selectors,Python,Selenium,Xpath,Scrapy,Css Selectors,我想知道Selenium中是否有像Scrapy中的ele.css选择器那样的“相对”选择器。例如,在Scrapy中,可以执行以下操作: for li in response.css('ul.rows li p.result-info'): lnk = li.css('a::attr(href)').extract_first() prc = li.css('span.result-meta span.result-price::text').extract_first()

我想知道Selenium中是否有像Scrapy中的
ele.css
选择器那样的“相对”选择器。例如,在Scrapy中,可以执行以下操作:

for li in response.css('ul.rows li p.result-info'):
    lnk = li.css('a::attr(href)').extract_first()
    prc = li.css('span.result-meta span.result-price::text').extract_first()
    sqf = li.css('span.result-meta span.housing::text').extract_first()
    loc = li.css('span.result-meta span.result-hood::text').extract_first()
    objct = {
        'lnk': lnk,
        'prc': prc,
    }
    if sqf:
        chunk = sqf.split()
        objct['sqf'] = chunk[len(chunk)-1]
    if loc:
        objct['loc'] = loc
    yield objct
在硒中可以做类似的事情吗?

现在我一直在使用下面的代码,这显然会产生问题,因为路径不相关。比如说,我不是一次一个项目地抓取每个项目的所有细节(即a项目的价格、尺寸、颜色,然后是B项目的价格、尺寸、颜色,然后是C项目的价格、尺寸、颜色等等),而是陷入困境?将所有项目的一个细节(即项目A、项目B和项目C的价格,然后是项目A、项目B和项目C的尺寸),如以下代码所示

discoverable_cards = browser.find_elements(By.XPATH, '//div[@class="discoverableCard"]')
product_type = browser.find_elements(By.XPATH, '//div[@class="discoverableCard-body"]/div[1]/span')
titles = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-title")]')
descriptions = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-description")]')
categories = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-category")]')
balances = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-balance")]')
currencies = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-currencyCode")]')
percentages = browser.find_elements(By.XPATH, '//div[contains(@class, "discoverableCard-percent")]')
statuses = browser.find_elements(By.XPATH, '//span[contains(@class, "discoverableCard-formattedDate")] | //div[contains(@class, "discoverableCard-InDemandBottomLabel")]')
HTML的一个示例(以及我的意思的一个示例)


在上面的例子中,我想做的是,比如说,选择
discoverable card
(即
discoverable_card=browser.find_元素(By.XPATH,//discoverable card'
),然后做进一步的选择:
dc_child=discoverable_card.find_元素(By.XPATH,'relative/path/to/child'))

您只需选择已定义元素的子元素/子元素,如下所示:

discoverable_cards = browser.find_elements(By.XPATH, '//discoverable-card')
for card in discoverable_cards:
    dc_child = card.find_element(By.XPATH, './relative/path/to/child')

请注意,您应该在child(
/
)/substant(
/
)定位器的开头指定点,以指向当前
元素

是否可以共享HTML(至少简化)和所需的输出?@Andersson可以说,我不是在寻找特定类型的输出。我在寻找一种方法来选择一个元素,然后选择与最初选择的元素相关的子元素,如果有意义的话?我可以定义一些HTML,请稍等,因为
选择了当前节点,correct?当您可以使用
卡片
引用它时,使用
/
有什么意义?如果要使用任何其他选择器,是的,它将与
卡片一样工作。find_element()
,但是对于XPath,您还应该在上下文中指定点对点
discoverable_cards = browser.find_elements(By.XPATH, '//discoverable-card')
for card in discoverable_cards:
    dc_child = card.find_element(By.XPATH, './relative/path/to/child')