我很难过。我试图用vba用文本" hi"填写描述文本区域。但是我收到了错误。我做错了什么?
这里有元素:
<textarea name="Description" id="hdnDescription" wrap="soft" cols="71" maxlength="100000" style="width:500; height:240;font-family:arial;" ondescriptiondest="0" rows="6" class="tipField"></textarea>
这是我尝试过的代码:
Sub test()
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
With objIE
.Visible = True
.navigate Website
Do While .Busy Or .readyState <> 4
DoEvents
Loop
' Description
objIE.document.getElementByID("hdnDescription").Value = "hi"
End With
End Sub
我也尝试过使用getElementsByName而不是ID,但是也没有用:
objIE.document.getElementsByName("Description").Item(0).Value = Description
帮助将不胜感激!谢谢!
答案 0 :(得分:1)
如果我使用Chrome打开您的网址,我会看到您描述的textarea hdnDescription。
如果我使用IE11打开您的URL,则textarea hdnDescription将呈现为不可见,但可以看到带有IFrame和自己的HTML内容的富文本编辑器。为什么?没有线索...但是像这样,代码行objIE.document.getElementByID("hdnDescription").Value = "hi"
不会按预期工作。
所以我选择了另一个结构更简单的网站:https://www.netvoip.ch/support textarea位于最底层。
然后,使用此网址的代码段完全正常。我看到&#34; hi&#34;出现在textarea:
Dim objIE As Object
Set objIE = CreateObject("InternetExplorer.Application")
Dim webSite As String
webSite = "https://www.netvoip.ch/support"
With objIE
.visible = True
.navigate webSite
Do While .Busy Or .ReadyState <> 4
DoEvents
Loop
' Description
objIE.document.getElementByID("description").value = "hi"
End With
由于机制工作正常,最终可能是你必须将它也用于Kijiji,尽管textarea hdnDescription呈现为不可见,因为表单提交无论如何都将取其值。
答案 1 :(得分:0)
当文档开始加载时,IE应用程序进入readyState 4。在开始更改DOM之前,您还必须等待文档readyState。
这是我用来等待从另一个项目中获取IE的Sub。
Private Sub WaitUntilLoaded(ie As Object)
Dim i As Long
Dim ready As Boolean
' wait for page to connect
i = 0
Do Until ie.readyState = READYSTATE_COMPLETE
Application.Wait Now + TimeValue("0:00:01")
i = i + 1
If i > 300 Then
Err.Raise 513, , "Timeout"
End If
Loop
' wait for document to load
Do Until ie.document.readyState = "complete"
Application.Wait Now + TimeValue("0:00:01")
i = i + 1
If i > 300 Then
Err.Raise 513, , "Timeout"
End If
Loop
End Sub
此外,它是getElementsByTagName
,而不是getElementsByName
。
答案 2 :(得分:0)
&#34;描述&#34;框位于iframe中。通常,要与驻留在iframe中的元素进行交互,您需要从标记中提取src属性,然后导航到该src和基本URL形成的URL。然后,在新网页上,构建如
objIE.document.getElementByID(&#34; rteDescription&#34;)。值=&#34; hi&#34;
应该有效。但是,当我尝试将src添加到基本URL时,在这种情况下,新页面没有要与之交互的描述框(或其他任何内容)。在这种情况下,不要理解为什么这种方法会失败。
答案 3 :(得分:0)
让我们说HTML textarea 的标签是:
ObjIE.Document.getElementById(“hdnDescription”).innerHTML= “Hello World”
然后使用.innerHTML在textarea中提供文本,VBA代码提供文本“Hello World”:
namespace App\Listeners;
use Carbon\Carbon;
class UpdateLastLoginOnLogin
{
public function handle($user, $remember)
{
$user->last_login_at = Carbon::now();
$user->save();
}
}
答案 4 :(得分:0)
试试这个。
objIE.getElementsBytagname("textarea").Item.Value = "Your text."