在某些网络链接中为空时无法重新定义变量(Python Selenium)

Cannot redefine variable when empty in some weblinks (Python Selenium)

我有一个包含 link 列表的变量 (urllinks)。我使用 for 循环转到每个 link 并抓取数据,我在每个 link 中收集昵称和真实姓名。我下面的代码有效,除了有一些 links 没有昵称,只有真实姓名。在那些情况下,实名的 css 选择器等于昵称的 css 选择器(在 link 有昵称的地方)。我想如果我做一个 if 语句说如果每个 link 的实名是空的,然后将它重新分配给正确的定义。但是,它没有用。任何建议都会非常有帮助

for a in urllinks:
        driver.get(a)
        nickname = driver.find_elements_by_css_selector("mainc")

        realname = driver.find_elements_by_css_selector("subc")
     
    #need to fix the case when there is no nickname and only realname. In those cases
    #realname = driver.find_elements_by_css_selector("mainc")
    if realname is None:
        realname= driver.find_elements_by_css_selector("mainc")
    for r in range(len(names2)):

        temporarydata4 = {"Main": main[r].text,
                          "Sub": sub[r].text}
        scraperresult2.append(temporarydata4)

我想这里有几个问题:

  1. find_elements_by_css_selector returns 网络元素列表。如果没有匹配它 returns 一个空列表,但它仍然是一个列表,而不是 None.
  2. 要获取元素文本,我想这就是您想要的,您应该在返回的网络元素上应用 .text
  3. 你应该使用 try-exceptfind_element_by_css_selector 或者如果你使用 find_elements_by_css_selector
    从列表中获取第一个元素 所以,我认为你的代码应该是这样的:
for a in urllinks:
    driver.get(a)
    nickname = driver.find_elements_by_css_selector("mainc")[0].text
    realname = driver.find_elements_by_css_selector("subc")[].text
     
    if realname is None:
        realname= driver.find_elements_by_css_selector("mainc")[0].text

    #continue with your code

我能够利用@Prophet 的直觉做我需要做的事!因为 driver.find.elements_by_css_selector 基本上是要存储一个列表。我所做的是:

for a in urllinks:
        driver.get(a)
        nickname = driver.find_elements_by_css_selector("mainc")

        realname = driver.find_elements_by_css_selector("subc")
     
    #need to fix the case when there is no nickname and only realname. In those 
    cases
    #realname = driver.find_elements_by_css_selector("mainc")
    if len(realname)==0:
        realname= driver.find_elements_by_css_selector("mainc")
    for r in range(len(names2)):

        temporarydata4 = {"Main": main[r].text,
                          "Sub": sub[r].text}
        scraperresult2.append(temporarydata4)