Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 从IE更改为MS Edge浏览器,VBA网页抓取_Excel_Vba_Web Scraping - Fatal编程技术网

Excel 从IE更改为MS Edge浏览器,VBA网页抓取

Excel 从IE更改为MS Edge浏览器,VBA网页抓取,excel,vba,web-scraping,Excel,Vba,Web Scraping,我目前使用IE做一些网页抓取,你们可能知道IE的支持将在2021年9月结束。我现在想更新我的这段代码以使用WindowsEdge,但是我不确定如何做 代码的其余部分很好。我唯一需要更改的是使用另一个web浏览器。并不是每个人都会安装Chrome或Firefox,所以我没有随大流。但是,MS Edge已更新到所有Windows PC 理想情况下,我会希望它使用边缘或IE,检查哪个安装在PC上,并使用那个一个。但是我不知道怎么做。我试着用谷歌搜索答案,但是它提到了shell,我不确定我将如何为此编写

我目前使用IE做一些网页抓取,你们可能知道IE的支持将在2021年9月结束。我现在想更新我的这段代码以使用WindowsEdge,但是我不确定如何做

代码的其余部分很好。我唯一需要更改的是使用另一个web浏览器。并不是每个人都会安装Chrome或Firefox,所以我没有随大流。但是,MS Edge已更新到所有Windows PC

理想情况下,我会希望它使用边缘或IE,检查哪个安装在PC上,并使用那个一个。但是我不知道怎么做。我试着用谷歌搜索答案,但是它提到了shell,我不确定我将如何为此编写代码

PS我将把工作表发送给其他用户,以便它能够在他们的电脑上工作,而不仅仅是在我的电脑上

Dim Html As HTMLDocument
Dim objIE As Object
Dim Y As Integer '''integer variable we'll use as a counter
Dim result As String ''''string variable that will hold our result link
Dim pageNumber As Long ''' Number of pages.
Dim nextPageElement As Object '''page element
Dim HtmlText As Variant '''for html data
Dim myCounter As Long '''counting the number of loops data goes to sheet10 q2

Dim wsSheet As Worksheet 
Dim wb As Workbook
    Set wb = ThisWorkbook
         Set wsSheet = wb.Sheets("Sheet2")
 Y = 0 

'''################ Internet Explorer ###################
Set objIE = New InternetExplorer 'initiating a new instance of Internet Explorer and asigning it to objIE
      objIE.Visible = True 
''' Url to NAVIGATE is taken from sheet10 as is the number of pages
    objIE.navigate Sheets("Sheet10").Range("F2").Value & Replace(Worksheets("Sheet10").Range("G2") & Range("H2").Value, " ", "+") 
Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop '''wait here a few seconds while the browser is busy

    Set Html = objIE.document
        'The Parent Class is set in Sheet10 C2
        Set elements = Html.getElementsByClassName(Sheets("Sheet10").Range("C2")) ' parent CLASS
'''FOR LOOP
    For Each element In elements
Dim Html作为HTMLDocument
模糊对象
Dim Y作为整数''''我们将用作计数器的整数变量
将结果设置为字符串“”,字符串变量将保存我们的结果链接
将页码设置为长度为“”的页数。
Dim nextPageElement作为对象“”页面元素
Dim HtmlText作为html数据的变量''''''
Dim myCounter,只要“计算循环数”数据进入sheet10 q2
将工作表设置为工作表
将wb设置为工作簿
设置wb=ThisWorkbook
设置wsSheet=wb.Sheets(“Sheet2”)
Y=0
“Internet Explorer”###################
Set objIE=New InternetExplorer'启动Internet Explorer的新实例并将其分配给objIE
objIE.Visible=True
''导航的Url取自sheet10,页面数也是如此
objIE.navigate表(“Sheet10”).范围(“F2”).值和替换(工作表(“Sheet10”).范围(“G2”)和范围(“H2”).值,“,”+”)
Do While objIE.Busy=True或objIE.readyState 4:DoEvents:Loop'''在浏览器忙时在此等待几秒钟
设置Html=objIE.document
'父类在Sheet10 C2中设置
Set elements=Html.getElementsByClassName(Sheets(“Sheet10”).Range(“C2”))父类
“循环”
对于元素中的每个元素
一如既往,提前感谢。

我相信Webdriver是Edge的前进之路。尽管针对这个问题的评论中有很好的内容:
stackoverflow.com/questions/54814411/edge browser automation
,但没有给出答案


使用Webdriver,您有两个初始非互斥选项:


  • 以下引自上述链接:

    铬:

    • 安装Microsoft Edge(Chromium)。要确认已安装Microsoft Edge(Chromium),请转到
      edge://settings/help
      ,并验证版本号是否为版本75或更高版本

    • 导航到并下载与边缘版本号匹配的驱动程序(
      edge://settings/help

    • 下载特定于语言的客户端驱动程序,将代码(Python、Java、C#、Ruby、JavaScript)转换为Microsoft Edge驱动程序在Microsoft Edge(Chromium)中运行的命令

    EdgeHTML:

    同上

    • 为您的Windows和Microsoft Edge(EdgeHTML)版本下载相应的Microsoft WebDriver服务器
    • 下载您选择的WebDriver语言绑定。所有Selenium语言绑定都支持Microsoft Edge(EdgeHTML)

    如果您已经在任何语言(包括VBA)中使用过Selenium,那么从给定的代码示例中可以很容易地了解其他语言


    当然,这涉及到语言的变化(来自VBA),这并不能解决编写可以在大多数人的机器上运行而无需额外安装的东西的真正问题,但看起来确实是未来的方向。为了保证软件的可用性,您可以随时查看用户连接到的远程服务器安装(不确定这对许多人来说有多大的可扩展性)。

    在Excel中使用Web数据源是一个选项吗?然后你就可以完全不用VBA了。