Python 脚本在分析填充结果中的名称和地址时遇到错误

Python 脚本在分析填充结果中的名称和地址时遇到错误,python,python-3.x,selenium,web-scraping,Python,Python 3.x,Selenium,Web Scraping,我已经创建了一个脚本来解析不同结果的名称和地址,在本例中,来自一个网站。当点击每个结果时,地址就会变得可见。但是,当我运行下面的脚本时,我得到了两个结果,但随后我遇到了指向该行项目的此元素不可交互错误。单击 要填充结果,需要在搜索框中填入此M203DB并点击搜索按钮 我试过: from selenium import webdriver from selenium.webdriver.common.by import By from selenium.webdriver.chrome.optio

我已经创建了一个脚本来解析不同结果的名称和地址,在本例中,来自一个网站。当点击每个结果时,地址就会变得可见。但是,当我运行下面的脚本时,我得到了两个结果,但随后我遇到了指向该行项目的此元素不可交互错误。单击

要填充结果,需要在搜索框中填入此M203DB并点击搜索按钮

我试过:

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.common.keys import Keys

def get_content(link):
    driver.get(link)
    WebDriverWait(driver,20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "input.inv_addressSuggestion"))).send_keys('M203DB',Keys.RETURN)

    for item in WebDriverWait(driver,20).until(EC.presence_of_all_elements_located((By.CSS_SELECTOR, "[id^='listItemContainer_']"))):
        item.click()
        name = item.find_element_by_css_selector("span.detailContactVal").text
        address = item.find_element_by_css_selector("span.detailAddr").text
        print(name,address)

if __name__ == '__main__':
    URL = 'https://www.sjp.co.uk/site-services/find-your-adviser?async=1'
    with webdriver.Chrome() as driver:
        get_content(URL)
脚本抛出的错误:

raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.ElementNotInteractableException: Message: element not interactable
我如何从所有结果中提取姓名和地址


此错误表示您尝试单击的项目在视口中不可见

查看此Q/A了解更多详细信息和解决方案

这种特殊的刮削有很多挑战https://www.sjp.co.uk/site-services/find-your-adviser.

它有一个反应灵敏的布局,在移动设备上显示不同 它有一个用于移动视图的“加载更多”按钮 它有需要扩展的分组部分 它有多个视图,此应用程序呈现重复的ID。如果 您尝试获取查询的长度 document.querySelectorAll[id^='listItemContainer.'] 得到112,而不是总结果为56。你必须限制 使用此选择器将结果发送到第一个容器 mCSB_1_容器[id^='listItemContainer_']。 下面是一个正在工作的python脚本,它利用了所有这些。请阅读内联评论:

从selenium导入webdriver 从selenium.webdriver.common.by导入 从selenium.webdriver.chrome.options导入选项 从selenium.webdriver.support.ui导入WebDriverWait 从selenium.webdriver.support将预期的_条件导入为EC 从selenium.webdriver.common.keys导入密钥 从selenium.webdriver.common.action\u链导入ActionChains 进口稀土 def get_内容链接: driver.getlink WebDriverWaitdriver,20.untelec.visibility\u元素的位置由.CSS\u选择器确定,输入.inv\u地址建议。发送\u key'M203DB',key.RETURN 尝试: 如果有“加载更多”按钮,请单击它 load\u more=WebDriverWaitdriver,5.untelec.visibility\u元素\u由.CSS\u选择器定位,.inv\u loadMoreBtn 加载\u更多。单击 除: 通过 从mCSB_1_容器元素中选择,而不是全部,以避免重复 对于WebDriverWaitdriver中的项,20.untelec.presence\u\u所有元素\u由.CSS\u选择器定位,mCSB\u 1\u容器[id^='listItemContainer\u']: 打印%s\n%item.get\u attributeid 获取父元素及其类 父项=项。通过xpath“..”查找元素 parent\u class=parent.get\u attributeclass 如果父元素具有inv_childData,则将其分组并需要展开 如果重新搜索儿童数据,则父类: 如果父可展开元素未展开,则类inv\u child未折叠 如果不重新搜索,则父类: actions=ActionChainsdriver 移动到元素 actions.move_to_elementparent.perform 然后单击它展开子项 parent.click 使用Javascript scrollIntoView将视图滚动到项目,以避免ElementNotInteractiableException 驱动程序。执行脚本参数[0]。scrollIntoView,项目 单击该项目 项目。单击 name=item.find\u element\u by\u css\u选择器span.detailContactVal.text 地址=item.find\u element\u by\u css\u选择器span.detailAddr.text 打印名:“%s”\n地址:\n%s\n%name,地址 如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu': URL='1〕https://www.sjp.co.uk/site-services/find-your-adviser?async=1' chrome_选项=选项 无头 chrome\u选项。添加\u参数-无头 将窗口大小设置为1920x1080,以避免响应移动视图 chrome_选项。添加_参数-window-size=19201080 使用webdriver.Chromeoptions=chrome\u选项作为驱动程序: 获取内容URL
你有没有选择看一下@Christos Lytras?如果你能抽出一些时间来解决这个问题,我会很高兴的。谢谢