Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/12.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
Can';t使用PowerShell登录twitch_Powershell_Internet Explorer_Browser_Automation_Twitch - Fatal编程技术网

Can';t使用PowerShell登录twitch

Can';t使用PowerShell登录twitch,powershell,internet-explorer,browser,automation,twitch,Powershell,Internet Explorer,Browser,Automation,Twitch,我正在编写PowerShell脚本,以便通过Internet Explorer登录twitch。我已成功填充用户名和密码字段,但“登录”按钮仍处于禁用状态。需要启用“登录”按钮,然后单击以成功登录。请引导我做这项工作。下面是我的剧本 $Url ="https://www.twitch.tv/login" $ie = New-Object -ComObject 'internetExplorer.Application' $ie.Visible= $true # Make it

我正在编写PowerShell脚本,以便通过Internet Explorer登录twitch。我已成功填充用户名和密码字段,但“登录”按钮仍处于禁用状态。需要启用“登录”按钮,然后单击以成功登录。请引导我做这项工作。下面是我的剧本

$Url ="https://www.twitch.tv/login"
$ie = New-Object -ComObject 'internetExplorer.Application'
$ie.Visible= $true # Make it visible

$username="Your_User_Name"
$password="Your_Password"

$ie.Navigate($Url)

while($ie.Busy) { Start-Sleep -Seconds 2 }
while($ie.ReadyState -ne 4) {start-sleep -m 100} 

$usernamefield = $ie.Document.IHTMLDocument3_getElementById("login-username")  
$usernamefield.value = $username;

$passwordfield = $ie.Document.IHTMLDocument3_getElementById("password-input")
$passwordfield.value = $password;

$loginbutton = $ie.document.getElementsByTagName("button")[3].click()

输入框似乎实际上不接受这些值。除此之外,还有两个登录按钮。一个是您看到的“已禁用”,另一个在输入框填充时显示。下面的命令显示了每种类型的css的差异

$ie.Document.getElementsByTagName("Button") | where {$_.textContent -eq "Log In"} | foreach {"Log In button`n";$_.outerhtml;"`n"}

Log In button

<button class="tw-block tw-c-text-inherit tw-full-height tw-full-width tw-interactive tw-pd-l-0 tw-pd-r-1 tw-tab-item" role="tab"><div class="tw-align-left tw-flex tw-flex-column tw-full-heig
ht"><div class="tw-flex-grow-0"><div class="tw-font-size-5 tw-regular">Log In</div></div><div class="tw-flex-grow-1"></div><div class="tw-flex-grow-0"><div class="tw-tabs__active-indicator" d
ata-test-selector="ACTIVE_TAB_INDICATOR"></div></div></div></button>


Log In button

<button disabled="" class="tw-align-items-center tw-align-middle tw-border-bottom-left-radius-medium tw-border-bottom-right-radius-medium tw-border-top-left-radius-medium tw-border-top-right-
radius-medium tw-core-button tw-core-button--disabled tw-core-button--primary tw-full-width tw-inline-flex tw-interactive tw-justify-content-center tw-overflow-hidden tw-relative" data-a-targ
et="passport-login-button"><div class="tw-align-items-center tw-core-button-label tw-flex tw-flex-grow-0"><div class="tw-flex-grow-0" data-a-target="tw-core-button-label-text">Log In</div></d
iv></button>
现在我们可以自动登录了。按标签查找按钮的问题在于,在IE中,只返回一个按钮。通过使用xpath,我们能够找到所有按钮并按文本进行过滤

Install-Module Selenium -Scope CurrentUser -Force

$Url ="https://www.twitch.tv/login"
$username="Your_User_Name"
$password="Your_Password"

$driver = Start-SeInternetExplorer -StartURL $Url

$usernamefield = $driver.FindElementById("login-username")

Send-SeKeys -Element $usernamefield -Keys $username

$passwordfield = $driver.FindElementById("password-input")

Send-SeKeys -Element $passwordfield -Keys $password

$loginbutton = $driver.FindElementsByXPath("//button")| where text -eq 'Log In' | select -last 1

$loginbutton.Click()
我仍然建议使用Chrome、Firefox或New Edge而不是IE。以下代码将在Chrome中实现相同的结果

Install-Module Selenium -Scope CurrentUser -Force

$Url ="https://www.twitch.tv/login"
$username="Your_User_Name"
$password="Your_Password"

$driver = Start-SeChrome -StartURL $Url

$usernamefield = Find-SeElement -Driver $driver -Id "login-username"

Send-SeKeys -Element $usernamefield -Keys $username

$passwordfield = Find-SeElement -Driver $driver -Id "password-input"

Send-SeKeys -Element $passwordfield -Keys $password

$loginbutton = Find-SeElement -Driver $driver -By TagName "button" | where text -eq 'Log In' | select -last 1

$loginbutton.Click()

我尝试使button类与启用时相同,但在IE中使用PowerShell进行自动化时仍无法单击它。我建议您可以参考下面的答案以用于自动化浏览器。Selenium WebDriver以本机方式驱动浏览器,就像真实用户一样,因此它最接近真实用户的行为。但您使用的powershell脚本只是设置了输入值,它无法模拟用户行为,因此无法启用登录按钮。我已经测试了您的代码,它每次都会请求通过电子邮件发送验证代码或解决难题。其想法是在后台运行此脚本以打开隐藏的浏览器窗口。我有两个问题;首先,IE使用硒是否也可能有同样的情况?第二,我猜使用selenium TheTwitch并不是把它当作一个普通用户,这就是为什么每次都要问代码或谜题的原因。我们能绕过这个吗?这真的与代码无关。Twitch要求您验证新设备/应用程序。所以,如果你在电脑上用chrome完成一次,我想在电脑/浏览器上就不需要了。Powershell Selenium module不使用IE,就我而言,我必须使用IE。我在这里发现另一个博客使用了带有IE的Selenium。我修改了代码,并填充了用户名和密码。虽然已启用,但无法单击“登录”按钮。我是新来selenium的,你能帮我修改代码,点击登录按钮吗?然后我会接受你的回答。你能使用Edge吗?不。我看到Selenium模块支持Edge。
Install-Module Selenium -Scope CurrentUser -Force

$Url ="https://www.twitch.tv/login"
$username="Your_User_Name"
$password="Your_Password"

$driver = Start-SeChrome -StartURL $Url

$usernamefield = Find-SeElement -Driver $driver -Id "login-username"

Send-SeKeys -Element $usernamefield -Keys $username

$passwordfield = Find-SeElement -Driver $driver -Id "password-input"

Send-SeKeys -Element $passwordfield -Keys $password

$loginbutton = Find-SeElement -Driver $driver -By TagName "button" | where text -eq 'Log In' | select -last 1

$loginbutton.Click()