python - 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()
解决方案
使用绝对 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"))
参考:
推荐阅读
- javascript - 如何在 ajax Success 上向 Datatable 添加新行而不重新加载页面
- c++ - 'int'之前的预期主表达式 - 我该如何解决这个问题?
- java - Thymeleaf:属性文件中的占位符
- python - 使用 yaml aws AttributeError 启动 Ray 集群:“Worker”对象没有属性“worker_id”
- sql - SQL 语句中的提示
- c++ - 唯一指针和双重列表:插入问题
- c# - 为什么在我的 C# 代码中 MD5 会比 SHA256 慢?
- c# - 在 asp.net mvc 中不显示 ajax 调用的图像列表
- amazon-web-services - 我可以使用 AWS Lambda 来满足我的要求吗?
- python-3.x - 部署时找不到 Heroku 命令