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 3.x Selenium只获取一个结果,而忽略其他相关结果_Python 3.x_Selenium - Fatal编程技术网

Python 3.x Selenium只获取一个结果,而忽略其他相关结果

Python 3.x Selenium只获取一个结果,而忽略其他相关结果,python-3.x,selenium,Python 3.x,Selenium,我是硒的新手。搜索一个网站,我得到10个结果,每一页。这些结果在页面上显示为列表(li标记),每个列表包含相同的属性。当我的条件满足时,我会转到另一个相关的网页并获得所需的内容。但是,当我的代码不断循环列表时,它无法找到其他列表的相同属性。这是我的密码: p_url = "https://www.linkedin.com/vsearch/f?keywords=BARCO%2BNV%2Bkortrijk&pt=people&page_num=5"

我是硒的新手。搜索一个网站,我得到10个结果,每一页。这些结果在页面上显示为列表(li标记),每个列表包含相同的属性。当我的条件满足时,我会转到另一个相关的网页并获得所需的内容。但是,当我的代码不断循环列表时,它无法找到其他列表的相同属性。这是我的密码:

        p_url = "https://www.linkedin.com/vsearch/f?keywords=BARCO%2BNV%2Bkortrijk&pt=people&page_num=5"             
        driver.get(p_url)

        time.sleep(5)

        results = driver.find_element_by_id("results-container")
        employees = results.find_elements_by_tag_name('li')

        #emp_list = []
        #for i in range(len(employees)):
        #    emp_list.append(employees[i])


        for emp in employees:
            try:

                main_emp = emp.find_element_by_css_selector("a.title.main-headline")
                name = emp.find_element_by_css_selector("a.title.main-headline").text
                href = main_emp.get_attribute("href")

                if name != "LinkedIn Member":
                    location = emp.find_element_by_class_name("demographic").text
                    href = main_emp.get_attribute("href")
                    print(href)
                    print(location)

                    driver.get(href)
                    exp = driver.find_element_by_id("background-experience")

                    amkk = exp.find_elements_by_class_name("editable-item")

                    for amk in amkk:
                        him = amk.find_element_by_tag_name("header").text
                        him2 = amk.find_element_by_class_name("experience-date-locale").text

                        if '\n' in him:
                            a = him.split('\n')
                            print(a[0])
                            print(a[1])

                        print(him2)

            except Exception as exc:
                print(exc)
                continue
在此代码中,行
main\u emp=emp.find\u element\u by\u css\u选择器(“a.title.main headline”)
在第一次工作后停止工作。结果,我得到了一个错误
Message:stale element reference:element未附加到页面文档

从stackoverflow的问题中,我看到一些人说内容已经从DOM结构中删除,还有人建议从另一篇文章中用结果填充列表。这里是我尝试的
emp_list=[]
对于范围内的i(len(员工)):
emp_list.append(employees[i])
,但是,它也不起作用


如何克服此问题?

您使用的选择器错误。您正在使用
results容器
id获取结果。这可以正常工作,但从中收集元素的方法不起作用。它返回的元素不仅仅是员工(我不太清楚为什么)

如果您将选择器更改为此单一选择器,则只会得到员工,而不会得到其他不需要的元素

employees = results.find_elements_by_css_selector("ol[id='results']>li")
编辑 由于正在打开员工并丢失元素列表,您可能希望尝试在新选项卡中打开员工,请在此处执行操作,然后关闭选项卡

例如:

    for emp in employees:
            try:
                    main_emp = emp.find_element_by_css_selector("a.title.main-headline")
                    # Do stuff you need...

                    # Open employee in new tab (make sure Keys is imported)
                    main_emp.send_keys(Keys.CONTROL + 't')
                    # Focus on new tab
                    driver.switch_to_window(d.window_handles[1])

                    # Do stuff inside the employee page
                    # Close the tab you opened
                    driver.close()
                    # Switch back to the first tab
                    driver.switch_to_window(d.window_handles[0])

注意:对于
OSX
您应该使用
main\u emp.send\u键(keys.COMMAND+'t')
您使用的选择器错误。您正在使用
results容器
id获取结果。这可以正常工作,但从中收集元素的方法不起作用。它返回的元素不仅仅是员工(我不太清楚为什么)

如果您将选择器更改为此单一选择器,则只会得到员工,而不会得到其他不需要的元素

employees = results.find_elements_by_css_selector("ol[id='results']>li")
编辑 由于正在打开员工并丢失元素列表,您可能希望尝试在新选项卡中打开员工,请在此处执行操作,然后关闭选项卡

例如:

    for emp in employees:
            try:
                    main_emp = emp.find_element_by_css_selector("a.title.main-headline")
                    # Do stuff you need...

                    # Open employee in new tab (make sure Keys is imported)
                    main_emp.send_keys(Keys.CONTROL + 't')
                    # Focus on new tab
                    driver.switch_to_window(d.window_handles[1])

                    # Do stuff inside the employee page
                    # Close the tab you opened
                    driver.close()
                    # Switch back to the first tab
                    driver.switch_to_window(d.window_handles[0])

注意:对于
OSX
您应该使用
main\u emp.send\u keys(keys.COMMAND+'t')

您可以共享您正在使用的HTML吗?我刚刚检查了您进入的页面,当我进入
results container
div
时,没有一个
li
是此元素的直接子元素,但您说它适用于第一个员工。您可以共享您使用的HTML吗?我刚刚检查了您进入的页面,当我进入
结果容器
div
时,没有一个
li
是此元素的直接子元素,但您说它适用于第一个员工。感谢您的回答。然而,我仍然有同样的问题。在相关网页中,此代码适用于第三个成员并获取内容。在同一页中,代码msut适用于第四个成员。但是我仍然有
陈旧的元素引用:元素未附加到页面文档中
错误。我的猜测是,在循环中,我转到“成员配置文件”页面,当这种情况发生时,
员工保存的所有信息都将丢失。@mlee_jordan是的,这正是发生的情况。@mlee_jordan检查我的新编辑。这可能对你有帮助。谢谢你的回答。然而,我仍然有同样的问题。在相关网页中,此代码适用于第三个成员并获取内容。在同一页中,代码msut适用于第四个成员。但是我仍然有
陈旧的元素引用:元素未附加到页面文档中
错误。我的猜测是,在循环中,我转到“成员配置文件”页面,当这种情况发生时,
员工保存的所有信息都将丢失。@mlee_jordan是的,这正是发生的情况。@mlee_jordan检查我的新编辑。这可能对你有帮助。