首页 > 解决方案 > python - 如何使用python和selenium单击linkedin中的所有连接按钮?

问题描述

我在连接脚本中进行了链接,但他现在点击了我的班级按钮,我的错误是如何点击所有连接按钮?

如何单击所有连接按钮?

这是我的代码:

#search

click_search = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/header[1]/div[1]/form[1]/div[1]/div[1]/div[1]/artdeco-typeahead-deprecated[1]/artdeco-typeahead-deprecated-input[1]/input[1]"))).send_keys("pyt")
time.sleep(.2)
click_search = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/header[1]/div[1]/form[1]/div[1]/div[1]/div[1]/artdeco-typeahead-deprecated[1]/artdeco-typeahead-deprecated-input[1]/input[1]"))).send_keys("hon")
time.sleep(.2)
click_search = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/header[1]/div[1]/form[1]/div[1]/div[1]/div[1]/artdeco-typeahead-deprecated[1]/artdeco-typeahead-deprecated-input[1]/input[1]"))).send_keys(Keys.ENTER)
click_people = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[5]/div[7]/div[4]/div[1]/div[1]/header[1]/div[1]/div[1]/div[1]/ul[1]/li[1]/button[1]/span[1]"))).click()
click_connect = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[5]/div[7]/div[4]/div[1]/div[2]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/ul[1]/li[4]/div[1]/div[1]/div[3]/div[1]/button[1]"))).click()
click_done = WebDriverWait(driver, 50).until(EC.element_to_be_clickable((By.XPATH, "/html[1]/body[1]/div[5]/div[8]/div[1]/div[1]/div[1]/section[1]/div[1]/div[2]/button[2]"))).click()

标签: pythonseleniumselenium-webdriverselenium-chromedriverlinkedin

解决方案


使用绝对 XPath 定位器不是最好的主意,因为它使它们非常脆弱并且对任何DOM更改都很敏感

推荐的定位器策略是尽可能使用ID,但是当 ID 不存在或动态时,最好想出另一种方法。

例如,您可以坚持使用按钮文本。

比较您的 XPath 表达式People

/html[1]/body[1]/div[5]/div[7]/div[4]/div[1]/div[1]/header[1]/div[1]/div[1]/div[1]/ul[1]/li[1]/button[1]/span[1]

有了这个:

//span[text()='People']

并且这两个表达式基本上匹配相同的元素:

在此处输入图像描述

因此,您可以使用find_elements_by_xpath()函数获取所有Connect按钮,例如:

connect_buttons = driver.find_elements_by_xpath("//button[text()='Connect']")

for connect_button in connect_buttons:
    print(connect_button.get_attribute("aria-label"))

参考:


推荐阅读