如何让驱动程序导航到 selenium python 中的新页面
How do I make the driver navigate to new page in selenium python
我正在尝试使用 selenium 和 python.
编写一个脚本来自动化 Linkedin 上的求职申请
步骤简单:
- 打开LinkedIn页面,输入id密码登录
- 打开 https://linkedin.com/jobs and enter the search keyword and location and click search(directly opening links like https://www.linkedin.com/jobs/search/?geoId=101452733&keywords=python&location=Australia 加载时卡住,可能是由于缺少上一页的一些 post 信息)
- 点击打开求职页面,但这似乎没有更新驱动程序,因为它仍在上一页搜索。
import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from bs4 import BeautifulSoup
import pandas as pd
import yaml
driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
url = "https://linkedin.com/"
driver.get(url)
content = driver.page_source
stream = open("details.yaml", 'r')
details = yaml.safe_load(stream)
def login():
username = driver.find_element_by_id("session_key")
password = driver.find_element_by_id("session_password")
username.send_keys(details["login_details"]["id"])
password.send_keys(details["login_details"]["password"])
driver.find_element_by_class_name("sign-in-form__submit-button").click()
def get_experience():
return "1%C22"
login()
jobs_url = f'https://www.linkedin.com/jobs/'
driver.get(jobs_url)
keyword = driver.find_element_by_xpath("//input[starts-with(@id, 'jobs-search-box-keyword-id-ember')]")
location = driver.find_element_by_xpath("//input[starts-with(@id, 'jobs-search-box-location-id-ember')]")
keyword.send_keys("python")
location.send_keys("Australia")
driver.find_element_by_xpath("//button[normalize-space()='Search']").click()
WebDriverWait(driver, 10)
# content = driver.page_source
# soup = BeautifulSoup(content)
# with open("a.html", 'w') as a:
# a.write(str(soup))
print(driver.current_url)
driver.current_url returns https://linkedin.com/jobs/ instead of https://www.linkedin.com/jobs/search/?geoId=101452733&keywords=python&location=Australia 应该的。我试图将内容打印到一个文件中,它确实来自以前的工作页面而不是来自搜索页面。我还尝试从页面中搜索元素,例如体验和简单应用按钮,但搜索结果为未找到错误。
我不确定为什么这不起作用。
有什么想法吗?提前致谢
更新
如果尝试直接打开 https://www.linkedin.com/jobs/search/?f_AL=True&f_E=2&keywords=python&location=Australia but not https://www.linkedin.com/jobs/search/?f_AL=True&f_E=1%2C2&keywords=python&location=Australia
之类的东西,它会起作用
这两个链接的区别在于,其中一个只取一个经验值,而另一个取两个值。这意味着它可能不是 post 值问题。
您在单击搜索按钮后立即获取并打印当前 URL,在页面根据从服务器收到的响应更改之前。
这就是为什么它输出 https://linkedin.com/jobs/
而不是 https://www.linkedin.com/jobs/search/?geoId=101452733&keywords=python&location=Australia
.
WebDriverWait(driver, 10)
或 wait = WebDriverWait(driver, 20)
不会像 time.sleep(10)
那样造成任何类型的延迟。
wait = WebDriverWait(driver, 20)
只实例化一个wait
对象,WebDriverWait
模块的实例/class
我正在尝试使用 selenium 和 python.
编写一个脚本来自动化 Linkedin 上的求职申请步骤简单:
- 打开LinkedIn页面,输入id密码登录
- 打开 https://linkedin.com/jobs and enter the search keyword and location and click search(directly opening links like https://www.linkedin.com/jobs/search/?geoId=101452733&keywords=python&location=Australia 加载时卡住,可能是由于缺少上一页的一些 post 信息)
- 点击打开求职页面,但这似乎没有更新驱动程序,因为它仍在上一页搜索。
import selenium
from selenium import webdriver
from selenium.webdriver.support.ui import WebDriverWait
from bs4 import BeautifulSoup
import pandas as pd
import yaml
driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver")
url = "https://linkedin.com/"
driver.get(url)
content = driver.page_source
stream = open("details.yaml", 'r')
details = yaml.safe_load(stream)
def login():
username = driver.find_element_by_id("session_key")
password = driver.find_element_by_id("session_password")
username.send_keys(details["login_details"]["id"])
password.send_keys(details["login_details"]["password"])
driver.find_element_by_class_name("sign-in-form__submit-button").click()
def get_experience():
return "1%C22"
login()
jobs_url = f'https://www.linkedin.com/jobs/'
driver.get(jobs_url)
keyword = driver.find_element_by_xpath("//input[starts-with(@id, 'jobs-search-box-keyword-id-ember')]")
location = driver.find_element_by_xpath("//input[starts-with(@id, 'jobs-search-box-location-id-ember')]")
keyword.send_keys("python")
location.send_keys("Australia")
driver.find_element_by_xpath("//button[normalize-space()='Search']").click()
WebDriverWait(driver, 10)
# content = driver.page_source
# soup = BeautifulSoup(content)
# with open("a.html", 'w') as a:
# a.write(str(soup))
print(driver.current_url)
driver.current_url returns https://linkedin.com/jobs/ instead of https://www.linkedin.com/jobs/search/?geoId=101452733&keywords=python&location=Australia 应该的。我试图将内容打印到一个文件中,它确实来自以前的工作页面而不是来自搜索页面。我还尝试从页面中搜索元素,例如体验和简单应用按钮,但搜索结果为未找到错误。
我不确定为什么这不起作用。
有什么想法吗?提前致谢
更新
如果尝试直接打开 https://www.linkedin.com/jobs/search/?f_AL=True&f_E=2&keywords=python&location=Australia but not https://www.linkedin.com/jobs/search/?f_AL=True&f_E=1%2C2&keywords=python&location=Australia
之类的东西,它会起作用这两个链接的区别在于,其中一个只取一个经验值,而另一个取两个值。这意味着它可能不是 post 值问题。
您在单击搜索按钮后立即获取并打印当前 URL,在页面根据从服务器收到的响应更改之前。
这就是为什么它输出 https://linkedin.com/jobs/
而不是 https://www.linkedin.com/jobs/search/?geoId=101452733&keywords=python&location=Australia
.
WebDriverWait(driver, 10)
或 wait = WebDriverWait(driver, 20)
不会像 time.sleep(10)
那样造成任何类型的延迟。
wait = WebDriverWait(driver, 20)
只实例化一个wait
对象,WebDriverWait
模块的实例/class