如何访问 selenium 网络驱动程序中没有名称属性的 div 按钮?
How to access button of div that has no name attribute in selenium web driver?
我写了这段代码,想用 selenium
web driver
登录 Twitter。但是之后
填写用户名 我无法单击 下一步 按钮,因为它没有name
或 id
属性。我该怎么做?
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://twitter.com/login?lang=en-gb")
time.sleep(3)
driver.find_element_by_name('text').send_keys('username')
time.sleep(3)
driver.find_element_by_class_name('').click()
time.sleep(3)
print('TEst Completed')
要单击 Next 元素,您可以使用以下任一方法 :
使用 xpath 和 text()
:
driver.find_element(By.XPATH, "//span[text()='Next']").click()
使用 xpath 和 contains()
:
driver.find_element(By.XPATH, "//span[contains(., 'Next')]").click()
在 Chrome 中,您可以通过右键单击感兴趣的元素(Next
按钮)并从弹出窗口中 selecting Inspect 来调出检查器。然后在 Inspector window 中,用鼠标右键单击您感兴趣的元素(它应该已经突出显示),然后 select Copy
然后 Copy full XPath
。然后,您可以将结果粘贴到 find_element_by_xpath
调用中。
顺便说一句,如果您希望您的程序以慢动作 运行 来查看正在发生的事情,那么使用 time.sleep
调用是可以的,但是如果您希望它 运行 以最快的速度,您应该首先调用 driver.implcitly_wait(n)
,其中 n
是一些秒数(例如,3)。然后,当您在 driver.get
之后执行 find_element 调用时,驱动程序将在超时前最多等待 3 秒让所需元素出现,但不会等待超过必要的时间。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
try:
driver = webdriver.Chrome()
driver.maximize_window()
# Wait for up to 3 seconds (but maybe less) for sought after
# elemt to appear:
driver.implicitly_wait(3)
driver.get("https://twitter.com/login?lang=en-gb")
driver.find_element_by_name('text').send_keys('username')
driver.find_element_by_xpath('/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[6]/div/span/span').click()
print('Test Completed')
except Exception as e:
print("Got exception:", e)
finally:
# Come here even on exceptions to be sure we "quit" the driver:
input('Pausing until you hit enter...')
driver.quit()
更新
并非每个元素都有固定的 id
或 name
甚至 class
属性。
在这种特殊情况下,元素具有动态 class 名称,因此这里最稳定的方法是使用 Next
文本。
这可以使用 XPath 定位器完成,如下所示:
driver.find_element_by_xpath("//span[text()='Next']").click()
我写了这段代码,想用 selenium
web driver
登录 Twitter。但是之后
填写用户名 我无法单击 下一步 按钮,因为它没有name
或 id
属性。我该怎么做?
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://twitter.com/login?lang=en-gb")
time.sleep(3)
driver.find_element_by_name('text').send_keys('username')
time.sleep(3)
driver.find_element_by_class_name('').click()
time.sleep(3)
print('TEst Completed')
要单击 Next 元素,您可以使用以下任一方法
使用 xpath 和
text()
:driver.find_element(By.XPATH, "//span[text()='Next']").click()
使用 xpath 和
contains()
:driver.find_element(By.XPATH, "//span[contains(., 'Next')]").click()
在 Chrome 中,您可以通过右键单击感兴趣的元素(Next
按钮)并从弹出窗口中 selecting Inspect 来调出检查器。然后在 Inspector window 中,用鼠标右键单击您感兴趣的元素(它应该已经突出显示),然后 select Copy
然后 Copy full XPath
。然后,您可以将结果粘贴到 find_element_by_xpath
调用中。
顺便说一句,如果您希望您的程序以慢动作 运行 来查看正在发生的事情,那么使用 time.sleep
调用是可以的,但是如果您希望它 运行 以最快的速度,您应该首先调用 driver.implcitly_wait(n)
,其中 n
是一些秒数(例如,3)。然后,当您在 driver.get
之后执行 find_element 调用时,驱动程序将在超时前最多等待 3 秒让所需元素出现,但不会等待超过必要的时间。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from webdriver_manager.chrome import ChromeDriverManager
driver = webdriver.Chrome(ChromeDriverManager().install())
try:
driver = webdriver.Chrome()
driver.maximize_window()
# Wait for up to 3 seconds (but maybe less) for sought after
# elemt to appear:
driver.implicitly_wait(3)
driver.get("https://twitter.com/login?lang=en-gb")
driver.find_element_by_name('text').send_keys('username')
driver.find_element_by_xpath('/html/body/div/div/div/div[1]/div/div/div/div/div/div/div[2]/div[2]/div/div/div[2]/div[2]/div[1]/div/div[6]/div/span/span').click()
print('Test Completed')
except Exception as e:
print("Got exception:", e)
finally:
# Come here even on exceptions to be sure we "quit" the driver:
input('Pausing until you hit enter...')
driver.quit()
更新
并非每个元素都有固定的 id
或 name
甚至 class
属性。
在这种特殊情况下,元素具有动态 class 名称,因此这里最稳定的方法是使用 Next
文本。
这可以使用 XPath 定位器完成,如下所示:
driver.find_element_by_xpath("//span[text()='Next']").click()