如何使用 Selenium 检查 HTML 中是否存在元素
How to check if an element exists in the HTML using Selenium
我有一个问题。我在页面上用class找了一个元素,从那里显示文字,然后split()
就反汇编了,但是没有元素就报错,不解析。
代码:
spans = driver.find_elements(By.XPATH, "//span[@class='ipsContained ipsType_break']")
for span in spans:
atag = span.find_element(By.XPATH, ".//a")
print(atag.get_attribute('href'))
urlik = atag.get_attribute('href')
driver.get(url=urlik)
time.sleep(2)
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
for page_number in range(int(urla.split()[3])):
page_number = page_number + 1
driver.get(url=urlik + f"page/{page_number}")
time.sleep(2)
imgs = driver.find_elements(By.CLASS_NAME, "cGalleryPatchwork_image")
for i in imgs:
driver.execute_script("arguments[0].scrollIntoView(true);", i)
time.sleep(0.2)
print(i.get_attribute("src"))
我需要检查这个:
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
而不是
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump")
使用
urla = driver.find_elements(By.CLASS_NAME, "ipsPagination_pageJump")
if urla:
urla[0].text
find_elements
方法 returns 一个 list 与传递的定位器匹配的网络元素。
因此,如果这样的元素存在 urla
将是一个 non-empty 列表,而 non-empty 列表在 Python 中被解释为布尔值 True
.
如果没有找到匹配的元素 urla
将是一个空列表,而空列表在 Python 中被解释为布尔值 False
.
要尝试使用 class 在页面上查找元素并从那里显示文本,而不管该元素是否存在,您可以将代码包装在 block handling the 中,如下所示:
driver.get(url=urlik)
time.sleep(2)
try:
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
for page_number in range(int(urla.split()[3])):
page_number = page_number + 1
driver.get(url=urlik + f"page/{page_number}")
time.sleep(2)
imgs = driver.find_elements(By.CLASS_NAME, "cGalleryPatchwork_image")
for i in imgs:
driver.execute_script("arguments[0].scrollIntoView(true);", i)
time.sleep(0.2)
print(i.get_attribute("src"))
except NoSuchElementException:
print("Element is not present")
我有一个问题。我在页面上用class找了一个元素,从那里显示文字,然后split()
就反汇编了,但是没有元素就报错,不解析。
代码:
spans = driver.find_elements(By.XPATH, "//span[@class='ipsContained ipsType_break']")
for span in spans:
atag = span.find_element(By.XPATH, ".//a")
print(atag.get_attribute('href'))
urlik = atag.get_attribute('href')
driver.get(url=urlik)
time.sleep(2)
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
for page_number in range(int(urla.split()[3])):
page_number = page_number + 1
driver.get(url=urlik + f"page/{page_number}")
time.sleep(2)
imgs = driver.find_elements(By.CLASS_NAME, "cGalleryPatchwork_image")
for i in imgs:
driver.execute_script("arguments[0].scrollIntoView(true);", i)
time.sleep(0.2)
print(i.get_attribute("src"))
我需要检查这个:
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
而不是
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump")
使用
urla = driver.find_elements(By.CLASS_NAME, "ipsPagination_pageJump")
if urla:
urla[0].text
find_elements
方法 returns 一个 list 与传递的定位器匹配的网络元素。
因此,如果这样的元素存在 urla
将是一个 non-empty 列表,而 non-empty 列表在 Python 中被解释为布尔值 True
.
如果没有找到匹配的元素 urla
将是一个空列表,而空列表在 Python 中被解释为布尔值 False
.
要尝试使用 class 在页面上查找元素并从那里显示文本,而不管该元素是否存在,您可以将代码包装在
driver.get(url=urlik)
time.sleep(2)
try:
urla = driver.find_element(By.CLASS_NAME, "ipsPagination_pageJump").text
for page_number in range(int(urla.split()[3])):
page_number = page_number + 1
driver.get(url=urlik + f"page/{page_number}")
time.sleep(2)
imgs = driver.find_elements(By.CLASS_NAME, "cGalleryPatchwork_image")
for i in imgs:
driver.execute_script("arguments[0].scrollIntoView(true);", i)
time.sleep(0.2)
print(i.get_attribute("src"))
except NoSuchElementException:
print("Element is not present")