繁体   English   中英

如果一个元素在 web 页面上不存在,那么有没有办法跳过一个元素,Selenium Python?

[英]Is there a way to skip an element if it does not exist on a web page with Selenium Python?

但是,我正在抓取许多类似的网页; 获取相同信息的信息位于某些页面的不同 XPATH 之下。

这是我尝试替换的两个 XPATH。

    city_e = WebDriverWait(driver, 20).until(
        EC.presence_of_element_located((By.XPATH, "//div/h4"))
        )
alternative_name_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//*[@id='SFbizctc53fcd34ec260b1442c7bd7b4']/div/div[1]"))
        )

完整代码如下:



results = []

for i in range(6):
    links = WebDriverWait(driver, 60).until(
            EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".SFpne a"))
        )
    links[i].click()
    time.sleep(4)


    name_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div/h3"))
        )
     alternative_name_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//*[@id='SFbizctc53fcd34ec260b1442c7bd7b4']/div/div[1]"))
        )
    city_e = WebDriverWait(driver, 10).until(
        EC.presence_of_element_located((By.XPATH, "//div/h4"))
        )       
        
    jobTitle_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div[@itemprop='contactPoint']/div"))
        ) 
    address_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div[@itemprop='contactPoint']/address"))
        )
    cell_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div/a[@class='SFbizctcphn']"))
        )
    email_e = WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//*[@id='SFbizpne0']/div[3]/div/a"))
        )
 

    full_member_content = {
    'Member_Name': [alternative_name_e.text],
    'member_Name': [name_e.text],
    'member_City': [city_e.text],
    'member_JobTitle': [jobTitle_e.text],
    'member_Address': [address_e.text],
    'member_Cell': [cell_e.text],
    'member_Email': [email_e.text]
        }
    
    
    
    results.append(full_member_content)
    time.sleep(4)
    driver.back()
    
    
print(results)

如果有一个我可以添加的 if 语句的 try catch 来完成这个,那就只是好奇。

第二个挑战:如果这是一个简单的解决方案,我也很好奇我是否可以重新运行city_e= WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div/h4")))当出现多个h4标签时。

谢谢!

错误信息

您不能寻找不存在的 object。 对于您正在查看的第一个问题:

强行入睡。

 time.sleep(4)

然后做一些类似于你对链接所做的事情

exists =EC.presence_of_all_elements_located((your selector))

在做任何事情之前检查存在的长度。 如果它大于 0,它就在那里,否则它是另一个。

对于您的奖励问题,对位于 h4 标签和 go 的所有元素执行相同的操作,就像您现在使用链接一样

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM