使用selenium检查域名

问题描述 投票:2回答:1

我试图在VBA中使用selenium检查一些域名。这是我的尝试

Option Explicit
Sub Check_Domain()
    Dim bot As New WebDriver
    Dim sDomain As String

    sDomain = "facebookopop.com"
    bot.Start "chrome", "https://ae.godaddy.com/domainsearch/find?checkAvail=1&tmskey=&domainToCheck=" & sDomain
    bot.Get "/"

    Dim eleTaken As Object, eleAvailable As Object

    bot.Wait 3000

    On Error Resume Next
    Set eleTaken = bot.FindElementByXPath("//text()[contains(.,'Domain Taken')]/ancestor::span[1]")
    Set eleAvailable = bot.FindElementByXPath("//text()[contains(.,'Domain Available')]/ancestor::span[1]")
    On Error GoTo 0

    If Not eleTaken Is Nothing Then
        Debug.Print "Not Avaialable"
    ElseIf Not eleAvailable Is Nothing Then
        Debug.Print "Avaialable"
    Else
        Debug.Print "Unknown"
    End If
    Stop
End Sub

代码运行缓慢,同时它不会一直给我正确的结果..如何以简单的方式检查元素是否存在并避免错误?

我不知道为什么以下代码不起作用

Sub Check_Domain_Advanced()
Dim bot As New WebDriver
Dim sDomain As String
Dim c As Range
Dim ele As Object
Dim t
Const MAX_WAIT_SEC As Long = 10

bot.Start "chrome"

For Each c In Range("A1:A" & Cells(Rows.Count, 1).End(xlUp).Row)
    If Not IsEmpty(c.Value) Then
        sDomain = c.Value
        bot.ExecuteScript "window.open(arguments[0])", "https://ae.godaddy.com/domainsearch/find?checkAvail=1&tmskey=&domainToCheck=" & sDomain
        bot.SwitchToNextWindow

        t = Timer
        Do
            If Timer - t > MAX_WAIT_SEC Then Exit Do
        Loop While bot.FindElementsByCss("span[class='domain-name-text h2']").Count = 0

        Set ele = bot.FindElementByCss("span[class='domain-name-text h2']")

        If ele.IsPresent Then
            If InStr(ele.Text, "available") Then
                c.Offset(, 1).Value = "Avaialable"
            ElseIf InStr(ele.Text, "taken") Then
                c.Offset(, 1).Value = "Not Avaialable"
            Else
                c.Offset(, 1).Value = "Unknown"
            End If
        End If
    End If
Next c

Stop
End Sub

我需要打开一个新选项卡中的每个链接并检查域(可用或已采用)但是我遇到了元素错误(因为页面加载)任何建议如何改进代码以便更快地工作并避免错误?

excel vba selenium web-scraping
1个回答
2
投票

使用具有此字段的API。有完全匹配API以及交叉销售。

完全符合

Option Explicit
Public Sub CheckDomainAvailability()
    Dim json As Object, domains(), i As Long, url As String
    domains = Array("google.com", "bszadfdws.com")
    url = "https://find.godaddy.com/domainsapi/v1/search/exact?q=####&key=dpp_search&pc=&ptl=&itc=dpp_absol1"
    With CreateObject("MSXML2.XMLHTTP")
        For i = LBound(domains) To UBound(domains)
            .Open "GET", Replace$(url, "####", domains(i)), False
            .send
            Debug.Print JsonConverter.ParseJson(.responseText)("ExactMatchDomain")("IsAvailable")
        Next
    End With
End Sub

交叉销售以查看相关域名:

https://find.godaddy.com/domainsapi/v1/crosssell/all?sld=domainNameGoesHere&key=dpp_search&pc=&ptl=&itc=dpp_absol1

然后,您需要查看关键CrossSellDomains而不是ExactMatchDomain的值


要求:

  1. here下载并添加到您的项目jsonconverter.bas
  2. VBE>工具>引用>添加对Microsoft Scripting Runtime的引用

硒版:

使用定时循环并检查available标头的内容。

Option Explicit
Public Sub CheckDomainAvailability()
    Dim d As WebDriver, domains(), i As Long, t As Date, ele As Object
    Const MAX_WAIT_SEC As Long = 10
    domains = Array("google.com", "bszadfdws.com")
    Set d = New ChromeDriver

    With d
        .Start "Chrome"
        For i = LBound(domains) To UBound(domains)
            .get "https://ae.godaddy.com/domainsearch/find?checkAvail=1&tmskey=&domainToCheck=" & domains(i)

            t = Timer
            Do
                On Error Resume Next
                Set ele = .FindElementByCss(".exact-header-tag")
                On Error GoTo 0
                If Timer - t > MAX_WAIT_SEC Then Exit Do
            Loop While ele Is Nothing
            If Not ele Is Nothing Then
                Debug.Print domains(i) & " available = " & (InStr(LCase$(ele.text), "available") > 0)
                Set ele  = Nothing
            End If
        Next
        .Quit
    End With
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.