Python Selenium-获取谷歌搜索HREF

Python Selenium-获取谷歌搜索HREF,python,html,selenium,automation,linkedin,Python,Html,Selenium,Automation,Linkedin,我的谷歌搜索网站上有两个href值示例:linkedin.com/in/和“Software Developer”和“London”: 但是我得到了一个错误的无效参数:“url”必须是字符串“ 我尝试过的另一种选择是 linkedin_urls = driver.find_elements_by_xpath('//div[@class="yuRUbf"]//a[@href]') for linkedin_url in linkedin_urls: url = link

我的谷歌搜索网站上有两个href值示例:linkedin.com/in/和“Software Developer”和“London”:

但是我得到了一个错误
的无效参数:“url”必须是字符串“

我尝试过的另一种选择是

linkedin_urls = driver.find_elements_by_xpath('//div[@class="yuRUbf"]//a[@href]')
for linkedin_url in linkedin_urls:
    url = linkedin_url.get_attribute("href")

    driver.get(url)
    sleep(5)
    sel = Selector(text=driver.page_source)  
我设法打开了第一个链接,但在尝试获取另一个链接时出现了一个错误
url=linkedin\u url.get\u attribute(“href”)


如果您能提供任何帮助,我将不胜感激,我已经在这方面停留了很长时间。

您的驱动程序正在打开指向新页面的链接,但它似乎正在放弃上一页。您可能需要考虑在新的选项卡或窗口中打开,然后切换到该选项卡/窗口,一旦完成,返回到上一页并继续。

建议执行:

1。创建一个函数,并切换到该选项卡:

来自selenium.webdriver.common.action\u链导入ActionChains
#定义在新选项卡中打开元素的函数:
def在“新建”选项卡中打开(驱动程序、元素):
“”“这比在新链接中打开要好,因为它模仿“人类”行为”“”
#你开始用的把手是什么
基本\u句柄=驱动程序。当前\u窗口\u句柄
行动链(驱动程序)\
.将_移动到_元素(元素)\
.key_向下(Keys.COMMAND)\
。单击()\
.key\u up(key.COMMAND)\
.perform()
#现在应该有两个选项卡。。。
如果len(驾驶员侧车窗把手)=2:
raise VALUERROR(f'Length of{driver.window\u handles}!=2…{len(driver.window\u handles)=};'))
#换新把手
对于driver.window_句柄中的x:
如果x!=基本U形手柄:
新句柄=x
#现在切换到新窗口
驾驶员。切换到。车窗(新把手)
2。执行并切换回主选项卡:

导入时间
#这将返回一个元素列表
linkedin_URL=driver.find_elements_by_xpath('//div[@class=“yuRUbf”]//a[@href]'))
#有点多余,但这是网络抓取,所以多余不会伤害你。
BASE_HANDLE=driver.current_window_HANDLE#所有大写字母,以便您可以更轻松地跟随它。。。
对于linkedin_URL中的元素:
#切换到新选项卡:
在“新建”选项卡(驱动程序、元素)中打开
#给页面一点时间加载:
睡眠时间(0.5)
#在这页上做些什么
打印(driver.current_url
#完成后,返回原始选项卡
#检查所有选项卡(应该只有2个)并关闭每个选项卡,除非
#这是“基本手柄”
对于driver.window_句柄中的x:
如果x!=基本句柄:
驾驶员。切换到。车窗(x)
驱动程序关闭()
#现在切换到新窗口
在driver.window\u handles中断言基本句柄#快速检查是否正常
司机。切换到。车窗(底部把手)#这会让你回头
#最后,一旦for循环完成,您可以选择继续使用驱动程序或关闭+退出(就像人类一样)
驱动程序关闭()
driver.quit()

< /代码> 您的驱动程序正在打开新页面的链接,但它显示,正在丢弃前一页。您可能需要考虑在新的选项卡或窗口中打开,然后切换到该选项卡/窗口,一旦完成,返回到上一页并继续。

建议执行:

1.创建一个函数以–并切换到该选项卡:

来自selenium.webdriver.common.action\u链导入ActionChains
#定义在新选项卡中打开元素的函数:
def在“新建”选项卡中打开(驱动程序、元素):
“”“这比在新链接中打开要好,因为它模仿“人类”行为”“”
#你开始用的把手是什么
基本\u句柄=驱动程序。当前\u窗口\u句柄
行动链(驱动程序)\
.将_移动到_元素(元素)\
.key_向下(Keys.COMMAND)\
。单击()\
.key\u up(key.COMMAND)\
.perform()
#现在应该有两个选项卡。。。
如果len(驾驶员侧车窗把手)!=2:
raise VALUERROR(f'Length of{driver.window\u handles}!=2…{len(driver.window\u handles)=};'))
#换新把手
对于driver.window_句柄中的x:
如果x!=基本句柄:
新句柄=x
#现在切换到新窗口
驾驶员。切换到。车窗(新把手)
2.执行并切换回主选项卡:

导入时间
#这将返回一个元素列表
linkedin_URL=driver.find_elements_by_xpath('//div[@class=“yuRUbf”]//a[@href]'))
#有点多余,但这是网络抓取,所以多余不会伤害你。
BASE_HANDLE=driver.current_window_HANDLE#所有大写字母,以便您可以更轻松地跟随它。。。
对于linkedin_URL中的元素:
#切换到新选项卡:
在“新建”选项卡(驱动程序、元素)中打开
#给页面一点时间加载:
睡眠时间(0.5)
#在这页上做些什么
打印(driver.current_url
#完成后,返回原始选项卡
#检查所有选项卡(应该只有2个)并关闭每个选项卡,除非
#这是“基本手柄”
对于driver.window_句柄中的x:
如果x!=基本句柄:
驾驶员。切换到。车窗(x)
驱动程序关闭()
#现在切换到新窗口
在driver.window\u handles中断言基本句柄#快速检查是否正常
司机。切换到。车窗(底部把手)#这会让你回头
#最后,一旦for循环完成,您可以选择继续使用驱动程序或关闭+退出(就像人类一样)
驱动程序关闭()
driver.quit()

Hey@YaakovBressler你能再详细说明一下吗?当然。具体说什么?@EmmanuelDo你是说用driver.get(url)代替吗要在现有选项卡上打开URL,我应该在新选项卡上打开LinkedIn URL,将搜索保留为主选项卡,从新选项卡中删除数据,然后返回主选项卡并循环该过程?如果是,则从
selenium.webdriver.common.keys导入keys
出于某种原因对我不起作用,当执行代码时,它只是忽略<代码>d
     linkedin_urls = driver.find_elements_by_xpath('//div[@class="yuRUbf"]//a')
links = [linkedin_url.get_attribute('href') for linkedin_url in linkedin_urls]
for linkedin_url in linkedin_urls:
    driver.get(links)
    sleep(5)
    sel = Selector(text=driver.page_source)
linkedin_urls = driver.find_elements_by_xpath('//div[@class="yuRUbf"]//a[@href]')
for linkedin_url in linkedin_urls:
    url = linkedin_url.get_attribute("href")

    driver.get(url)
    sleep(5)
    sel = Selector(text=driver.page_source)